JWT 토큰 4 (RefreshToken, 재발급, 리프레쉬 토큰)

작성자 : 조회수 :


전에 발급했던 토큰의 시간대를 2초로 일부로 짧게 만들어서 토큰이 만료가 되도록 합니다.





3초의 딜레이를 준 후에 전에 했던 것처럼 “/greeting”을 요청했을 때


Token is not valid 에러가 나옴을 알 수 있습니다.




그 이유는 전에 만들어 놨던 TokenCheckFilter에 에러 발생시 Token is no valid 라는 에러문을 출력하기로

 

했기 때문입니다.



그렇다면 다시 재발급은 받아야 하는데

 

여기서 전 시간에는 auth token access token값만 발행했더라면

이번에는 refresh token도 함께 발행해보겠습니다. (Bearer 문자열은 필요없습니다.)


테스트를 위해 토큰 박스 라는 객체를 하나 만듭니다.




GetToken 메소드를 테스트 코드 쪽에서 추가합니다.






위에서 만든 header refresh, auth token들을 가져와서 리턴 해줍니다.



UserLoginform 에서 refreshToken 필드값을 추가 해 줍니다.

 


로그인 폼 안에 임의적으로 refreshToken값도 받아 넣어서 요청해줍니다.


다시 loginFilterrefreshToken이 있을 때 재발급을 해주는 코드를 넣어줍니다.



리프레쉬 토큰이 검증 완료된다면 완료값을 다시 successful쪽으로 보내서

 

액세스토큰과 리프레쉬 토큰을 다시 재발급해줍니다.




refreshToken() 메서드를 이용해 리프레쉬 토큰 값으로 인증받아 토큰을 재발급 받은 후

 

다시 “/greating” 요청을 시도합니다 그 결과는

최종결과 :




위 사진과 같이 200 ok를 받아낼 수 있었습니다.

 

 

 

Refresh Token 의 장점은 자동 로그인이 편하게 되어 사용자에게 편리함을 주기도 하지만

 

Refresh Token을 탈취당했을 때의 보안적인 문제가 있기 때문에

 

우리는 리프레쉬 재발급 토큰을 어떻게 추적하고 관리하는 지에 대해서

 

고민해 봐야 합니다.

(예를 들면 DB에 각각 리프레쉬 토큰을 담아 넣어 두거나, Remember Me 토큰을 만들어 담거나)

 

 

 

 

출처 :

 

스프링부트 Java/Spring 웹 개발 마스터 초격차 패키지