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

haha0hazzang님의 프로필 이미지
haha0hazzang

작성한 질문수

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

JWT refresh 에대해 질문이 있습니다.

작성

·

20

0

jwt refresh 토큰은 access 토큰이 만료되었을때 재발급을 위한 토큰이라고 알고있는데요

보통 refresh 는 시간을 길게주고 access 토큰은 짧게 줘서 관리하는것으로 알고있습니다.

근데 강의를 다듣고 정리하는데 refresh에 대해 궁금증이 생겼습니다. 강의에서는 따로 DB에 저장안한거 같은데 DB에 저장하지않고 관리하는거라면 refresh도 만료시간이 있을텐데 이걸 어떻게 관리하는것인지요?

http only cookie로 클라이언트에 건내줘서 클라이언트가 만료될때마다 서버쪽으로 던지는것인지

아니면 DB에 저장해서 관리하는것인지 궁금합니다. 어떤것이 정답이라고 할수 없겠지만

보통 실무에서는 어떻게 관리할까요

답변 2

0

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

안녕하세요!

정석은 그냥 만료시키는게 정석입니다.

만료되면 다시 로그인하고 다시 받아오면 됩니다.

이게 제일 정상적인 방법이지만 말씀하신 "실무"에서는 무한하게 사용 가능하도록 하는 경우도 있고 다양한 말도 안되는 방법들을 사용하는 회사들을 많이 봤습니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. haha0hazzang님, refresh token 관리와 관련된 질문을 주셨네요.

JWT refresh token은 access token이 만료될 때 새로운 access token을 발급받기 위해 사용됩니다. 일반적으로 refresh token의 만료 시간은 길게 설정하고, access token은 짧게 설정하여 보안을 강화합니다. 이는 사용자 경험을 해치지 않으면서 보안을 유지하는 데 매우 효과적입니다.

Refresh Token 관리 방법:

  1. DB에 저장하지 않는 방식:

    • Refresh token을 클라이언트에 HttpOnly 쿠키로 저장하여 관리할 수 있습니다. 이렇게 하면 클라이언트 쪽에서 직접적인 스크립트로 접근할 수 없으므로 보안이 강화됩니다. 그러나 이 경우 클라이언트가 만료 시점에 스스로 서버에 새로운 refresh token을 요청하는 것이 불가능하기 때문에, 주기적으로 백엔드에서의 만료 검사가 필요합니다.
  2. DB에 저장하는 방식:

    • 실무에서 보편적으로 사용되는 방법은 refresh token을 사용자 데이터베이스에 저장하여 관리하는 것입니다. 이는 탈취 가능성을 줄이고, 로깅이나 통계 등의 부가적인 기능이 가능합니다. 만약 refresh token이 유출되었다면, 특정 토큰을 즉시 무효화할 수도 있습니다.

실무에서의 일반적인 관리 방법:
- 토큰 로테이션: refresh token을 사용할 때마다 새로운 refresh token과 access token을 발급하고, 기존 token은 무효화하는 방식을 사용합니다. 이는 유출됐을 가능성을 최소화합니다.
- 토큰 블랙리스트: 유효하지 않거나 의심스러운 토큰을 수집하여, 서버가 해당 토큰을 차단하도록 합니다.

이와 관련된 과거 답변을 함께 참고해 보시면 좋습니다:
- Token 재발급 관련 궁금증: refresh token의 만료와 관리에 대한 방안이 설명되어 있습니다.
- refresh 토큰이 만료됐는데 만료된 refresh 토큰으로 새로운 refresh 토큰을 발급받는 것인가요?: refresh token 재발급과 관련된 실무적인 측면을 다룹니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

haha0hazzang님의 프로필 이미지
haha0hazzang

작성한 질문수

질문하기