Spring/Spring Security

[Spring Security][KoLiving] 4-3. RefreshToken

noahkim_ 2023. 10. 3. 22:13

RefreshToken는 AccessToken을 재발급 받기 위한 토큰입니다.

노출되면 여러 문제가 발생하므로 보안에 각별히 주의해서 관리해야 하는데요.

구현하면서 어느 지점에서 어떻게 쓰이고 관리하는지 포스팅하겠습니다.

 

1. 최초 생성

  • 보안을 강화하고 발급한 AccessToken을 효과적이고 중앙 집중적으로 관리하기 위해 RefreshToken을 저장합니다.
  • 회원가입 완료 후 Redis에 저장됩니다.
  • Redis는 다른 클라우드 인스턴스에 위치하여 클러스터로 구성합니다.
  • Hash 자료구조에 {email : RefreshToken} 형식으로 저장합니다.
  • RefreshToken 유효기간을 TTL로 설정합니다. 

 

2. AccessToken 만료

  • 사용중인 AccessToken이 만료된다면, RefreshToken을 사용하여 AccessToken를 재발급 받습니다.

 

  1. 서버는 API 요청을 처리하기 전, AccesToken가 만료되었는지 확인합니다 (만료되었다면 401 응답코드를 내려줍니다)
  2. 클라이언트가 401 응답을 받게되면, RefreshToken를 포함한 토큰 재발급 요청을 서버에 전송합니다.
  3. 서버는 RefreshToken의 유효성을 확인하고, 유효하다면 AccesToken을 발급합니다. (유효하지 않다면 로그인창으로 리다이렉트)
  4. 클라이언트는 새로 발급받은 AccesToken를 가지고 원래의 API 요청을 재시도합니다.