코딩/Node.js

[NODE] JWT 기능 구현.

카슈밀 2024. 11. 1. 20:22
반응형

기존에 일했던 곳은 세션으로 로그인을 구현했는데, 

이력서에 하도 포폴 내 사용가능이라길래 JWT라고 하도 사람들이 그러길래 기능 구현을 해보았다.

JWT 내 만료시간, 서명, 내용이 들어간다.

 

그런데, 이거 완전 stateless라고해서 찾아보니 어허~

딱히 그러지도 않네...


기존에 서버의 경우 uuid를 통해 session을 만들어왔다.

그런데, 이건 뭐;;;

로그아웃 기능을 구현해보니, 탈취점이 확실히 보인다.

서버에서 cookie로 리프레쉬토큰만 저장해두는데, 로그아웃시 리프레쉬 토큰을 삭제한다.

리프레쉬는 서버에 저장하고 상대적으로 유효시간이 짧은 accesstoken을 저장하지 않게 구현했다.
로그인시 accessToken 내 만료시간 확인해서 로그인 시키는 구조인데, 이게 탈취되면 막을 방법이 없는 것.

 

이걸 막고자 서버에 유통기한 시간이 짧은 접근토큰을 저장하면 매번 교체시 query가 발생할테고, 서버에 부하가 가리라고 본다.

그렇다고 저장안할순 없어, 서버에 저장해서 매번 토큰 값을 조회하는 방식인데, 이건 완전히 그냥 uuid 세션 방식으로 쓰는 것 과 같다..

 

유효시간을 30분이나, 10분으로 잡을 경우 기존 세션방식인 매번 db쿼리를 때리는 것보단 나은 점이 있긴한데, 비용이 절감되서 좋지만,
해킹에 취약하니 세션방식으로 가야할 것 같다는 생각이든다

 

기술적인 의문이 들어서 찾아보니 역시 나랑 같은 내용을 적은 사람이 있더라...

https://engineerinsight.tistory.com/232#%E2%9C%94%EF%B8%8F%C2%A0%EB%A1%9C%EA%B7%B8%EC%95%84%EC%9B%83%20%EC%8B%9C%EC%97%90%20%EB%B8%94%EB%9E%99%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%97%90%20Refresh%20Token%EC%9D%84%20%EC%A0%80%EC%9E%A5%ED%95%9C%EB%8B%A4.-1

 

[우테코] JWT 방식에서 로그아웃, Refresh Token 만들기(1): JWT의 Stateless한 특징을 최대한 살리려면?

안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 💋 인트로 스탬프크러쉬는 사용

engineerinsight.tistory.com

 

해당 글 내에서 ip조회를 해서 해당 내용까지 체크하는 기능이 있는데, 그거까진 너무 복잡하고 쓰는게 맞는것 같진 않아 흐음...

뭐가 정답인지는 모르겠지만,

 

사이트가 보안에 취약해도 되는 곳이라면 문제가 없으나, 대부분 해커들이 헛짓거리하려고 시도하는 관계로 굳이 위험을 갖고 jwt로 시도하는 필요는 없다고 생각한다.

728x90