질문을 삭제하지 말아주세요.!
 
1
0
-1

http://l5.appkr.kr/lessons/46-jwt.html

여기를 보면, ttl이 2시간일 경우, 클라이언트가 서버에 토큰을 인증받으면 다시 또 2시간 동안 유효한 토큰이 된다고 써있는데...

아닌거로 알고 있었는데, 그게 사실인가요?


그리고 ttl을 짧게해라! 유출됐을 때 권한 남용을 막기 위해서!는 수긍이 되는데, 그리고 refresh token의 수명은 길게해도 된다고 하던데, 어쨌거나 refresh token이 유출됐을 때, 남용은 더 오래할 수 있기때문에 같은 결과를 초래하지 않을까 싶습니다.

궁금하네요. 언제 refresh token을 발행하고 정말로 다시 발행하는 주된 이유가 무엇인지...

    CommentAdd your comment...

    2 answers

    1.  
      3
      2
      1

      1. 실험 내용

      아래와 같은 설정으로, tymon/jwt-auth 패키지를 이용해서 테스트했습니다.


      JWT_TTL=1
      JWT_REFRESH_TTL=2
      JWT_BLACKLIST_GRACE_PERIOD=0


      발급 받은 토큰은 아래와 같습니다.

      // eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0L2FwaS9hdXRoL2xvZ2luIiwiaWF0IjoxNTE0MDA0MTg5LCJleHAiOjE1MTQwMDQyNDksIm5iZiI6MTUxNDAwNDE4OSwianRpIjoia0J1UmJjZDVzQmpCcGJOZiIsInN1YiI6MSwicHJ2IjoiNTYxZTJiODM1ODIzMjk2NTNkNjI2YTZjYTliNmRmYjVmNjdmNmQ0ZSIsInVzZXIiOnsiaWQiOjEsIm5hbWUiOiJNZW1iZXIiLCJlbWFpbCI6Im1lbWJlckBleGFtcGxlLmNvbSJ9fQ.hYNHL7GUiL_S_FSGlTVwLndpZQntz5WPvJHpDxpLr8E
      
      
      {
        "iss": "http://localhost/api/auth/login",
        "iat": 1514004189, // 2017-12-23T13:43:09+09:00
        "exp": 1514004249, // 2017-12-23T13:44:09+09:00
        "nbf": 1514004189, // 2017-12-23T13:43:09+09:00
        "jti": "kBuRbcd5sBjBpbNf",
        "sub": 1,
        "prv": "561e2b83582329653d626a6ca9b6dfb5f67f6d4e",
        "user": {
          "id": 1,
          "name": "Member",
          "email": "member@example.com"
        }
      }


      토큰을 발급 받은 후 1분이 지난 후, 토큰을 제출하면,


      토큰이 만료되었지만, 최초 발급 시점부터 2분 이내에 갱신 요청을 하여 아래 토큰을 얻었습니다. iss(발급자) 값와 각 시각 값이 조금씩 다르다는 점을 눈여겨 보시면 좋겠습니다. 대신 iat(발급일) 값은 변하지 않습니다.


      // eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0L2FwaS9hdXRoL3JlZnJlc2giLCJpYXQiOjE1MTQwMDQxODksImV4cCI6MTUxNDAwNDM0OCwibmJmIjoxNTE0MDA0Mjg4LCJqdGkiOiJEbHVWOXFRYlNQYUdwUGdUIiwic3ViIjoxLCJwcnYiOiI1NjFlMmI4MzU4MjMyOTY1M2Q2MjZhNmNhOWI2ZGZiNWY2N2Y2ZDRlIiwidXNlciI6eyJpZCI6MSwibmFtZSI6Ik1lbWJlciIsImVtYWlsIjoibWVtYmVyQGV4YW1wbGUuY29tIn19.AC0t5eNjgpYYQPII2HHjMY0Tx8j3UcDaXEe_b8nRLA0
      {
        "iss": "http://localhost/api/auth/refresh",
        "iat": 1514004189, // 2017-12-23T13:43:09+09:00
        "exp": 1514004348, // 2017-12-23T13:45:48+09:00
        "nbf": 1514004288, // 2017-12-23T13:44:48+09:00
        "jti": "DluV9qQbSPaGpPgT",
        "sub": 1,
        "prv": "561e2b83582329653d626a6ca9b6dfb5f67f6d4e",
        "user": {
          "id": 1,
          "name": "Member",
          "email": "member@example.com"
        }
      }


      갱신 받은 토큰을, 갱신 가능 시각 이후에 다시 갱신하려 하면,

      2. 관찰 결과


      • JWT는 최초 발급할 때 만료시각(유효기간)이 정해진다.
      • 토큰을 사용한다고 해서, 최초 발급시의 만료시각이 변경되지는 않는다.
      • 토큰 갱신이 가능한 시간 윈도우를 지나면, 갱신이 불가하며, 로그인을 통해 새로운 토큰을 얻어야 한다.


      김영우 님 좋은 질문해주셔서 고맙습니다. 덕분에 저도 놓치고 있던 부분을 다시 확인하는 계기가 되었습니다.

        CommentAdd your comment...
      1.  
        2
        1
        0

        내일 실험해 보고 결과 공유 드릴게요. 

        1. 김주원

          상식적으로 생각해도 토큰 안에 exp 클레임에 만료시각이 담겨있고 토큰 자체는 발급후 업데이트되지 않기에 유효기간이 갱신된다는 것은 말이 안되는데요. 아마 저 때는 토큰에 대한 이해도가 낮았던 듯 합니다. 여튼 실험은 다시 해 보고 다시 메시지 남길게요. 

        CommentAdd your comment...