Refresh 토큰

모찌모찌·2024년 4월 8일
0

유저 기능 원리

목록 보기
5/10
post-custom-banner

Refresh Token이란 ?

사용자의 인증을 위한 토큰이 아닌 새로운 에세스 토큰을 생성하는 용도로 사용한다.

사용자의 인증access 토큰으로 하되, access 토큰의 만료시간이 끝나면 refresh 토큰으로 다시 access토큰을 생성해준다.

✅ 기본적인 개념

  • Access Token의 유효기간은 짧다. (ex. 60일(마이크로소프트), 1시간(아마존))
  • Refresh Token의 유효기간은 길다. (ex. 1년 (마이크로소프트))
  • 평소에 API 통신할 때는 Access Token을 사용하고, Refresh Token은 - Access Token이 만료되어 갱신될 때만 사용한다.

즉, 통신과정에서 탈취당할 위험이 큰 Access Token의 만료 기간을 짧게 두고 Refresh Token으로 주기적으로 재발급함으로써 피해을 최소화한 것이다.

🌊동작원리

  1. 로그인 인증에 성공한 클라이언트는 Refresh TokenAccess Token 두 개를 서버로부터 받는다.

  2. 클라이언트는 Refresh TokenAccess Token로컬에 저장해놓는다.

  3. 클라이언트는 헤더Access Token을 넣고 API 통신을 한다. (Authorization)

  4. 일정 기간이 지나 Access Token의 유효기간이 만료되었다.
    4.1. Access Token은 이제 유효하지 않으므로 권한이 없는 사용자가 된다.
    4.2. 클라이언트로부터 유효기간이 지난 Access Token을 받은 서버는 401 (Unauthorized) 에러 코드로 응답한다.
    4.3. 401를 통해 클라이언트는 invalid_token (유효기간이 만료되었음)을 알 수 있다.

  5. 헤더에 Access Token 대신 Refresh Token을 넣어 API를 재요청한다.

  6. Refresh Token으로 사용자의 권한을 확인한 서버는 응답쿼리 헤더에 새로운 Access Token을 넣어 응답한다.

  7. 만약 Refresh Token도 만료되었다면 서버는 동일하게 401 error code를 보내고, 클라이언트는 재로그인해야한다.


🚨 Refresh Token 탈취 위험

Refresh Token의 통신 빈도가 적기는 하지만 탈취 위험에서 완전히 벗어난 것은 아니다.
Refresh Token이 탈취당하는 건 예방할 수 있을까? OAuth에서는 Refresh Token Rotation을 제시한다.

Refresh Token Rotation은 클라이언트가 Access Token를 재요청할 때마다 Refresh Token도 새로 발급받는 것이다.

이렇게 되면 탈취자가 가지고 있는 Refresh Token은 더이상 만료 기간이 긴 토큰이 아니게 된다. 따라서 불법적인 사용의 위험은 줄어든다.


👀 코드적으로 생각해보기

  • 먼저 Refresh Token을 발급하는 메서드 만듬 (JwtTokenProvider)
  • 로그인 로직 변경
    • 반환값을 Access Token, Refresh Token 두개라서 따로 응답 DTO를 만들어야 됨
    • Refresh Token 엔티티와 레파지토리를 만들어줌 (DB에 저장하기 위함)
    • Refresh Token을 발급하고 저장시킨 다음 Access Token과 함께 반환
  • Access Token이 만료되었을 때 확인해야 하는 것들
    • Access Token이 만료되었나
    • Refresh Token은 유효한가
    • DB에 저장해두었던 Refresh Token과 일치한가
    • 그럼 Access Token 재발급
  • Refresh Token이 만료되었을 때
    • 로그인을 해주세요

참고
블로그
블로그

profile
꼬꼬마 개발자 지망생
post-custom-banner

0개의 댓글