[TIL] #4 JWT Refresh Token

phdljr·2023년 8월 31일
0

TIL

목록 보기
4/70
post-custom-banner

Refresh Token

  • Access token의 기한이 만료되면 재발급 해줘야 됨
    • Access token의 기간은 짧게(보통 1시간)
    • Refresh token의 기간은 길게(보통 2주)
  • 이때 사용되는 토큰이 Refresh token
  1. 사용자 회원가입 정보 입력.

  2. 유효한 데이터가 들어왔다면 회원가입 처리(DB 등록)

  3. 사용자 정보와 권한이 들어가 있는 Access 토큰과 Refresh 토큰 발급

    (이때 Refresh 토큰은 DB에 저장한다.)

  4. 클라이언트는 두 종류의 토큰을 받는다.

  5. 이후 사용자가 데이터를 요청할 때마다 Access 토큰을 동봉하여 보낸다.

    • case1 : access token과 refresh token 모두가 만료된 경우
      • 에러 발생 (재 로그인하여 둘다 새로 발급)
    • case2 : access token은 만료됐지만, refresh token은 유효한 경우
      • refresh token을 검증하여 access token 재발급
    • case3 : access token은 유효하지만, refresh token은 만료된 경우
      • access token을 검증하여 refresh token 재발급
    • case4 : access token과 refresh token 모두가 유효한 경우
      • 정상 처리

    Tip

    [refresh token을 검증하여 access token 재발급]

    클라이언트(쿠키, 웹스토리지)에 저장되어있는 refresh token과 서버 DB에 저장되어있는 refresh token 일치성을 확인한 뒤 access token 재발급한다.

    [access token을 검증하여 refresh token 재발급]

    access token이 유효하다라는 것은 이미 인증된 것과 마찬가지니 바로 refresh token 재발급한다.

  6. 서버는 사용자로부터 전달된 Access 토큰이 유효한지만 판단한다(어자피 사용자의 권한과 정보는 토큰에 자체적으로 있다.)

  7. Access 토큰이 유효하면 사용자의 요청을 처리해서 반환해준다.

  8. 이때, 유효기간이 짧은 Access 토큰이 만료됐다고 해보자.

  9. 사용자는 만료된 Access 토큰으로 데이터 요청을 보낸다.

  10. 서버에서는 토큰에 대한 유효성 검사를 통해 만료된 토큰임을 확인한다.

  11. 클라이언트에게 "너의 토큰은 만료되었으니 갱신하기위해 Refresh 토큰을 보내라" 라고 응답한다.

  12. 클라이언트는 Access 토큰 재발급을 위해 Access 토큰과 Refresh 토큰을 전송한다.

  13. 전달받은 Refresh 토큰이 그 자체로 유효한지 확인하고, 3번에서 DB에 저장해 두었던 원본 Refresh 토큰과도 비교하여 같은지 확인한다.

  14. 유효한 Refresh 토큰이면 Access 토큰을 재발급 해준다.

  15. 만약 Refresh 토큰도 만료됐다면 로그인을 다시하고 Access 토큰과 Refresh 토큰을 새로 발급해준다.

  • 로그아웃을 하면 Access Token과 Refresh Token을 모두 만료시킨다.
profile
난 Java도 좋고, 다른 것들도 좋아
post-custom-banner

0개의 댓글