JWT 인증 시스템 보안 강화 #3
kjklalala2
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
저번 웹 프로젝트에서 Access Token(JWT)를 통한 인증 방식을 사용했습니다.
이 인증 방식의 문제점은 만일 제 3자에게 탈취당할 경우 보안에 취약한 문제점이 있었습니다.
이 문제를 해결하기 위해 토큰의 유효기간을 설정하는 방법이 있습니다.
토큰의 유효기간을 짧게 하는 경우 그만큼 사용자는 로그인을 자주 해서 새롭게 토큰을 발급받아야 하므로 불편합니다.
토큰의 유효기간을 길게 하는 경우 토큰을 탈취당했을 때 보안에 더 취약해지게 됩니다.
그러면 유효기간을 짧게 하면서 좋은 방법이 있지 않을까? 라는 질문이 듭니다.
답은 바로 Refresh Token 입니다.
기존의 Acess Token만을 이용한 서버 인증 방식에 대해 알아보겠습니다.
![image](https://user-images.githubusercontent.com/93240443/174243587-f192edc3-38c8-4dd8-ad1a-a22e7101bc55.png)
Access Token만을 이용한 인증 방식의 문제는 제 3자에게 토큰을 탈취 당하게 되면,
토큰의 유효 기간이 만료되기 전까지는 막을 방법이 없다는 점입니다. 그렇기에 대부분 토큰의 유효 기간을 짧게 설정합니다.
하지만, 짧게 설정하면 로그인을 자주 해야 하는 단점이 있어 사용자가 불편을 겪게 됩니다. 이를 어떻게 해결할까요?
Refresh Token으로 해결하게 됩니다.
Refresh Token이란 Access Token과 같은 JWT입니다. 하지만 차이점이 있다면, Refresh Token은 아주 긴 유효기간을 가지며
Access Token이 만료되었을 때 새로 발급을 해주기 위한 토큰이라는 점입니다.
그래서 보통 Acess Token의 유효 기간을 1시간, Refresh Token의 유효기간을 2주정도로 정합니다.
그 후 Access Token이 만료되었을 때, Refresh Token이 만료되지 않았다면 Access Token을 재발급하는 형태로 인증을 하게 됩니다.
정리를 하자면
Refresh Token & Access Token의 장단점
장점 : 기존의 Access Token만 있을 때보다 보안성 우수
단점 :
구현 시나리오는 다음과 같습니다.
이때, Refresh Token만 서버측의 DB에 저장하며 Refresh Token과 Access Token을 쿠키에 저장한다.
이때, 토큰을 검사함과 동시에 각 경우에 대해서 토큰의 유효기간을 확인하여 재발급 여부를 결정한다.
https://cotak.tistory.com/102
https://tansfil.tistory.com/59
https://velog.io/@kshired/Express%EC%97%90%EC%84%9C-JWT%EB%A1%9C-%EC%9D%B8%EC%A6%9D%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-Access-Token%EA%B3%BC-Refresh-Token
Beta Was this translation helpful? Give feedback.
All reactions