진짜 개발자
본문 바로가기

FrameWork/Spring Boot

Spring Boot - REST API 인증 - 2 (Refresh Token이란?)

728x90
jwttoken

이번 포스팅에서는, JWT Token을 이용한 REST API 인증 후, Token이 만료된 경우의 처리 방법에 대해 알아보겠습니다.

 

REST API 인증 1 - https://galid1.tistory.com/638

위의 링크를 통해 REST API 인증 과정을 숙지하고 오시면 더욱 이해가 쉽습니다.

 

 

 

1. Refresh Token을 사용하지 않는 경우

우선 인증 과정은 위와 같습니다.

 

 

토큰이 만료되었다면?

토큰이 만료되었다면, 사용자의 로그인 세션이 만료된것과 마찬가지이므로, 로그인을 재차 시도해야합니다.

 

 

 

위의 방법은 잘못 되었다

why ?

  • 이 방법은 토큰이 만료될때마다 사용자가 다시 로그인을 해야합니다. 그러나, 사용자가 로그인을 할때에는 사용자의 아이디 비밀번호가 이용되는데, 이정보는 네트워크상에서 많이 오가면 보안상 좋지 않습니다.
  • 사용자 경험에 매우 좋지 않습니다. 사용자는 다시 로그인 하는 과정이 지루하고, 귀찮게 느낄 수 있습니다.

만료시 재로그인이 당연하다고 생각하겠지만, 꼭 그렇지 않습니다. 일례로 페이스북을 사용하며, 다시 로그인하라는 화면을 본 기억이 나지 않을겁니다. 이는 페이스북이 Refresh Token 이라는 것을 통해 자동으로 다시 Access token을 발급 받기 때문입니다.

 

 

 

 

 

2. Refresh Token을 사용하자

2.1 Refresh Token이란?

  • Refresh Token은, 새로운 Access Token 을 발급 받기 위해 필요한 또 하나의 토큰입니다.
  • 만료기간이 Access Token에 비해 상대적으로 깁니다. (6~12 개월 등등 구현에 따라 다름)

 

 

 

2.2 Refresh Token을 왜 사용할까?

2.2.1 Access Token은 만료기간을 이용해 보안을 강화한다

AccessTokenClientServer(Resource Server) 에 필요한 자원을 사용하기 위해 필요합니다. 하지만 이 토큰은 공격자에 의해 중간에서 탈취 당할 수도 있습니다. 이렇게 되면, 공격자는, 이 토큰을 통해서 사용자의 정보를 마음대로 이용할 수 있습니다.

이점 때문에, AccessToken은 만료기간이 짧습니다. 이 방식으로, 탈취한 토큰을 무효화 하여, 보안을 높입니다.

 

 

2.2.2 사용자의 경험이 나빠진다(재로그인)

위의 이유로 Access Token은 만료기간이 매우 짧습니다. 따라서 Access Token을 다시 발급 받기 위해서, 다시 로그인을 해야합니다.

 

 

2.2.3 Refresh Token의 사용

  • Refresh Token은 Access Token을 재발급 받기위해 사용되며, 이를 통해 사용자가 다시 로그인을 하지 않아도 되도록 해줍니다. (사용자의 경험 상승)
  • Refresh Token은 AccessToken이 만료된 경우에 오직 Authorization Server(Auth API)와 통신을 합니다. 때문에, Refresh Token은 탈취 당할 확률이 매우 낮습니다.

 

 

 

 

 

 

3. Refresh Token을 통한 새 AccessToken 발급 과정

AccessToken이 만료되면, Client에서는 Refresh 요청을 Refresh Token과 함께 전송합니다. Auth API(Authorization Server)에서는 Refresh Token과 유저 정보를 확인하고 새로운 JWT token(AccessToken)을 발급합니다.