[TIL] Access Token의 문제점과 Refresh Token

Soo·2023년 2월 9일
0

프로젝트를 진행하면서 로그인 관련을 내가 맡다 보니까 Token에 대해 고민을 하게 되었다. 이제까지 다른 프로젝트를 하면서 로그인 기능을 구현했을 때에는 Access Token만 사용했었고, 사실상 Refresh Token의 필요성을 느끼지 못했었다.

하지만, 이번 프로젝트에서는 Refresh Token을 사용해보고자 했고, 사용을 했지만 결국에는 Refresh Token만 DB에 저장하고 모든 auth관련 api들을 Refresh Token만 계속 사용하고 정작 Access Token의 역할이 무엇인가? 이럴거면 Token을 하나만 사용하지 않고 왜 Refresh Token을 사용했지? 라는 의문이 들기 시작했다.

그래서 거의 프로젝트 막바지에 이럴거면 그냥 Token을 하나만 사용하는게 어떨까까지 고민하게 되었는데, 계속 생각해보니까 Access Token의 문제점이 분명하게 있었고, 이 기회에 그 문제점에 대해 자세하게 살펴볼 수 있게 되었다.

Access Token의 문제점

  1. 사용자의 잦은 로그아웃
  • Token을 하나만 사용할 경우, 제 3자에게 탈취 당했을 시에 보안에 취약하다. 유효기간이 짧은 Token일 경우, 그만큼 사용자는 로그인을 자주 해서 새로운 Token을 발급 받아야 하기 때문에 매우 불편하다
  • 그리고 로그인을 시도할 때마다 DB에 있는 정보를 계속해서 불러와야 하기 때문에 이는 서버에 부하가 가게 된다.
  1. 보안 문제
  • 반대로 Token의 유효기간을 늘린다면 Token이 탈취 당했을 경우, JWT는 발급한 후 삭제가 불가능하기 때문에 Token을 획득한 사람은 누구나 Token의 긴 유효기간동안 권한 접근이 가능해 이는 보안에 더욱 취약해지게 된다.
  • 이렇게 토큰이 탈취된다면 사용자는 계정의 제어권을 해커에게 속수무책으로 내어줄 수 밖에 없다.
  • 그리고 서버측에서도 토큰이 만료될 때까지 기다릴 수 밖에 없다.

💡 Refresh Token이란?

결론부터 말하자면 Access Token과 Refresh Token의 역할은 완전하게 다르다.

  • Access Token은 접근에 관여하는 토큰이고,
  • Refresh Token은 재발급에 관여하는 토큰이다.

목적

Refresh Token의 목적은 Access Token의 유효기간을 짧고, 자주 재발급 하도록 만들어 보안을 강화하면서 사용자에게 잦은 로그아웃 경험을 주지 않도록 하는 것이다.

결론

Refresh Token의 유효기간을 길게, Access Token의 유효기간을 짧게 설정하고, Access Token이 만료될 때마다 재발급해줌으로써 보안을 더욱 강화할 수 있고, 사용자의 불편함도 줄일 수 있다고 판단하여 Access Token과 Refresh Token 둘 다 사용하는 방법으로 결정했다.

profile
Soogineer's Devlog

0개의 댓글