Network Basis

[Network] JWT - 왜 refresh 토큰이 필요하지? (refresh 토큰이 탈취된다면?)

DevPing9_ 2021. 12. 10. 16:00

# Refresh Token

 해커의 Access Token 탈취를 방지하기 위해서, Access Token 의 유효기간을 짧게 두고 

 Access Toekn 의 유효기간이 만료되었을 시, 다시 서버에게 Request 헤더에 Refresh Token 을 삽입한채로

 인증(Silent Authentication)을 요청하기 위해 사용되는 토큰. 

 

 서버는 Refresh Token 을 검수한 후, 클라이언트에게 Access Token 을 재발급한다.

 

 주로 Refresh Token 은 서버 DB에 저장한다고 한다. 

 

 Access Token 은 다양한 정보를 담고 있으며, Refresh Token 은 재발급때 도움을 주는 짤막한 정보만 담아야 할 것이다. (뇌피셜)

 

# 의문점

 1. Refresh Token 자체에도 인증정보가 있을텐데 굳이 서버 DB에 저장해야 되는가?

   

    DB에 저장하지 않으면, 서버는 해당 토큰을 발급한 사실을 알 수가 없음.

   

    Refresh Token 의 payload 로만 Access Token의 발급여부를 판단할 경우

    해커가 Refresh Token 을 탈취 후, 임의로 payload의 정보를 유사하게 변경하여 생성하여

    탈취당한 유저의 정보뿐 아니라 다른 유저의 정보까지도 접근가능해짐

 

    이를 막기 위한 것으로 보인다.

 

 

 2.  Access Token 이 탈취되는 것처럼 Refresh Token 또한 탈취 되지 않을까?

 

     보통 대부분의 경우, 네트워크를 통하여 탈취가 진행된다고 한다. (HTTP 요청을 탈취)

     (그럼 Refresh Token도 HTTP Header에 포함이되기 때문에 탈취되지 않나?)         

     ---- [해결못한 궁금증] -----

 

     XSS 공격으로 JS 로 탈취하는 경우도 있다.

     (??? 링크 본문엔 탈취하면 해커가 아주 길게 서버에 안락하게 접근가능하다고 적혀있다..)       

     ---- [또 다시 커지는 궁금증] ----

 

     이를 막기 위해 Refresh Token Rotation (RTR) 기법이 사용된다고 한다...

     ---- [점입가경] ----

 

 

     * [RTR 기법에 대한 짤막정리]

       Refresh Token 을 One time Use Only 로 설정한다. (한번 쓰면 다음 refresh token 을 발급)         ---- [오오...]   

       

       한번 이상의 Refresh Token 의 사용이 감지되면, 탈취된 것으로 간주하고

       탈취된 것으로 간주 된 Refresh Token으로 인해 발급된 모든 Refresh Token 들을 폐기한다.

       (Token Chain 을 만들어야 하고, 관리해야 한다.)          --- [Token Chain 길이가 너무 길어지지 않게 제한하면 좋을듯?]

 

      

RTR 기법 그림예시 (https://pragmaticwebsecurity.com/articles/oauthoidc/refresh-token-protection-implications.html)

 

 

       * 해커가 지속적으로 Access Token 만 탈취한다면, 무용지물이 된다.

 

해커가 AccessToken 만 계속 가져다 쓰는 경우....

 

 

# 결론

 Refresh Token의 의의는 Access Token의 수명을 단축시키는데 있다.

 

 또한 서버에서 관리되기에, Refresh Token이 탈취되었다는 걸 인지하면 폐기시킬 수 있다.  (uhm...  🤕)

 

 고수님들이 시원하게 나의 궁금증을 정리 한번 해주셨으면 좋겠다. 😥

 

 떼잉... 취업부터하고 제대로 만드는법을 배워야겠다... 취업성공 ✌️

 

 

# Reference

 

An in-depth look at refresh tokens in the browser

An in-depth look at refresh tokens in the browser Single Page Applications can use refresh tokens in the browser. Yes, you read that right. This new development is awesome, because it makes access token renewal much more elegant. However, refresh tokens in

pragmaticwebsecurity.com

 

 

728x90