Access Token 과 Refresh Token

Server_side·2023년 11월 26일
1
post-custom-banner

서론

Access Token과 Refresh Token을 말하기에 앞서 JWT(Jason Web Token)에 대해 조금 알아보자
JWT란 유저의 로그인 정보를 확인하는 방법 중 하나로 Header, Payload, Signature로 구성되어 있으며 비밀키로 암호화 된다.
클라이언트는 JWT를 통해 지속적인 로그인을 할 필요없이 서비스를 이용 할 수 있게 된다.
하지만, 서버는 JWT가 변조되지 않았는지만 확인하기 때문에 JWT를 탈취당했을 때 보안상의 문제가 발생 할 수 있다.
보안문제를 최소화하기 위해 JWT는 유효기간을 Payload에 작성하고 Signature에 암호화되어 저장되므로 탈취자가 Payload의 유효기간을 더 길게 변경한다해도 비밀키를 알지 못하는 이상 Signature에 알맞게 암호화할 수 없어 오래는 사용할 수 없다.
또한, 보안을 위해 유효기간을 짧게 한다면 유저는 자주 로그인을 해야하게되므로 경험적으로 좋지 않다.

이러한 문제를 보완하기 위한 것으로 Access Token과 Refresh Token을 만드는 것이다.


Access Token / Refresh Token?

Access Token

  • 로그인이 필요한 서비스에 접근할 경우 사용
  • Refresh Token에 비해 상대적으로 짧 유효기간

Refresh Token

  • Access Token 만료 시 Access Token 재발급을 위해 사용
  • Access Token에 비해 상대적으로 긴 유효기간
  • Refresh Token의 형태는 다양함(JWT, uuid, Refresh Token Rotation**)

** Refresh Token Rotation: Refresh Token을 1회성으로 두고 Access Token 발급 시 Refresh Token도 함께 발급


프로세스

  1. 클라이언트가 로그인 인증에 성공하면 서버는 Access Token과 Refresh Token을 반환
  2. 클라이언트는 두가지의 Token을 저장하고 서버와 통신 시 Access Token을 Header에 추가하여 통신
  3. Access Token의 유효기간이 만료되었다면 서버는 401 에러코드 반환
  4. 클라이언트는 Refresh Token을 통해 서버에게 재요청
  5. 서버는 Refresh Token을 확인하여 새로운 Access Token 반환, Refresh Token도 만료 시 클라이언트는 새롭게 로그인 필요

결론

Access Token / Refresh Token을 적용함으로써 Token 탈취에 의한 보안적 위험을 최소화할 수 있다.
그렇다고 보안 측면에서 안정적이라는 뜻은 아니다.
Access Token / Refresh Token이 탈취된다면 정보가 유출되는 것은 기존과 동일하지만 Access Token의 유효기간을 기존보다 짧게 가져갈 수 있기 때문에 보안적 위험을 최소화할 수 있다는 것이다.

profile
아마도 난 백엔드 style?
post-custom-banner

0개의 댓글