우상
565
2020-09-15 11:02:29
5
289

JWT Refresh Token 관련 궁금증입니다.


jwt 를 구현하면서 로그인 성공시 리스폰즈 헤더에 Access Token 과 Refresh Token 을 발급하려합니다.

그러면 클라이언트는 Access Token 을 리퀘스트 헤더에 실어보내면서 인증하면 되는데

사용시간이 만료되면 Refresh Token 으로 Access Token 을 재발급받게 하려고 합니다.

그러면 헤더에는 항상 Access Token 과 Refresh Token 을 가지고 있어야 하는건가요?

1
  • 답변 5

  • John Suhr
    3k
    2020-09-15 11:55:31

    Refresh Token은 보안 문제로 자주 노출되면 안됩니다 요청 시 401을 받는 경우 Refresh Token을 보내는 요청을 날리고 재시도하는 커스텀 로직이 필요합니다.

  • 초보아키텍처
    25
    2020-09-15 12:33:54

    위에 분이 설명해주시는대로

    헤더에는 발급받은 access token으로만 resource api에 접근하고

    oauth2 스펙에도 있지만 refresh token으로 새로운 access token을 발급받는 api를 만들어서 새로 발급받은 access token을 가지고 다시 resource api에 접근하는 방식으로 취해야 합니다.

  • 우상
    565
    2020-09-15 14:48:42

    답변 감사합니다. 제가 궁금한건 Refresh Token 을 어디에 저장해야 하는지 궁금한데,

    다른 게시글을 읽어보니 서버사이드에 저장하면 된다고 하는데

    서버사이드가 정확히 무엇을 말하는지 궁금하네요.


    1. 처음 인증받을때 Access Token, Refresh Token 을 발급하고, Refresh Token 은 DB 에 저장

    2. 이때 발급받은 Access Token 은 헤더에 담아서 리소스에 접근하는데, Refresh Token 은 어디에 보관해야 하나요?

    3. Access Token 이 기간이 만료되었을때, 가지고 있던 Refresh Token 으로 DB 에 저장되어 있는 토큰과 비교해서 Access Token 을 재발급 받는데

    4. Access Token 이 기간만료되기 전까지 Refresh Token 을 어디에 보관해야 하는지가 궁금합니다.


    만약 SESSION 에 저장한다면 JWT 를 사용하는 의미가 있을까요?

  • John Suhr
    3k
    2020-09-16 08:20:48

    세션에 저장한하면 세션 쿠키와 다를 게 없겠죠. 스프링 Security에서는 In-memory와 jdbc를 지원하는 것 같네요.

  • 우상
    565
    2020-09-17 00:27:52

    답변감사합니다. 찾아보니 redis 를 적용해도 될것 같네요 감사합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.