인프런 커뮤니티 질문&답변

­윤영진[정보보안암호수학과]님의 프로필 이미지
­윤영진[정보보안암호수학과]

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

토큰 재발급 로직 코딩하기

Refresh token 과 Access token 의 차이점

작성

·

628

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

코드팩토리 통합 링크
https://links.codefactory.ai

Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!

 

안녕하세요 강사님, Refresh token 과 Access token 의 차이 점은 아래 두개만 있는걸로 이해하면 될까요?

  1. 만료 시간

  2. 사용처 (access token 은 데이터 접근시, refresh token 은 access token 발급 시에 사용)

그 외에 인증 방식, payload data, 관리 방식은 모두 동일하다고 이해하면 될까요?

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

payload data와 관리방식은 모두 같다고 말하기는 어려운게 payload data와 관리 방식을 서비스마다, 회사마다 다 다르게 합니다.

다만 같게 하고싶다면 할 수는 있다 정도로 생각하시면 될 것 같습니다. (반대로 다르게 하고싶다면 다르게 하면 됩니다)

감사합니다!

네 강사님 그러면 Refresh Token에 대한 추가 인증 로직에 대해서 인터넷 서치 결과.. Refresh Token 값 발급 당시 DB 에 저장하고 이후 해당 토큰 인증시 DB 와 비교하여 인증을 진행하는걸로 이해를 했는데요. 이또한 회사, 팀 마다 다르다고 이해하면 될까요?

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

원칙적으론 데이터베이스에 저장하지 않습니다. JWT는 유효성 검증을 그 자체로 진행이 가능한게 포인트니까요.

하지만 말씀하신 부분은 일종의 응용이라고 보시면 됩니다.

앞서 말씀드린대로 Refresh Token의 유효성 여부는 signature만 보더라도 확인 할 수 있습니다.

하지만 만약에 유효한 토큰을 만료시키고 싶다면 어떻게 해야할까요?

특정 토큰이 만료됐다고 기억하고 있는 방법밖에 없습니다.

이런 용도로 가장 좋은 저장소는 Redis같은 인메모리 데이터베이스입니다. DB라고 굉장히 넓은 용어를 사용하셨으니 이또한 포함 된다고 생각해도 될 것 같습니다.

Redis에 blacklist할 토큰을 저장하고 expiry를 토큰의 만료기간까지 준다면 토큰이 만료되기 전에도 특정 토큰을 사용하지 못하도록 할 수 있습니다.

더 나아가 expiry를 토큰의 유효기간만큼 지정 했기 때문에 토큰 자체에서 검증이 가능해지는 시기부터는 데이터베이스에서 정보가 삭제되니 리소스 사용도 최적화 할 수 있습니다.

와우 그런 의미였군요.. refresh token 인증 방법 자체에서는 DB 사용하지 않는게 원칙이긴 하나 추가 기능 (token blacklist 기능) 을 위해서 DB 를 사용하는 방법으로 구현이 되는거였군요..

친절한 답변 감사드립니다.

­윤영진[정보보안암호수학과]님의 프로필 이미지
­윤영진[정보보안암호수학과]

작성한 질문수

질문하기