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

김동혁님의 프로필 이미지
김동혁

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

JWT 인증

어세스 토큰 / 리프레시 토큰 컨셉트 질문

작성

·

259

0

현재 구성해놓은게

 

로그인을 하면 어세스 토큰과 리프레시 토큰을 프론트엔드에 넘겨줍니다.

 

서버에는 리프레시 토큰만 저장되어있는 상태구요. 

 

그리고 프론트엔드에서는

일정 주기마다 + 그리고 어떤 요청을 할 때마다 어세스 토큰을 헤더에 넣어서 백엔드에 요청하구요

백엔드는 이 어세스 토큰의 유효성을 확인하고 어세스토큰이 만료되었는데 리프레시 토큰 기한이 남아있으면

어세스 토큰을 재발급하고, 리프레시토큰마저 기한이 지나버리면 재로그인을 요청하는데요

 

여기 단점이. 이 방식대로 하면 

다른 자리에서 로그인을 했을 때 서버에서 리프레시 토큰이 이미 있는 상황이면 

기존 리프레시 토큰을 지우고 새로 리프레시 토큰을 발급 해주는데 

기존 자리에서 어세스 토큰이 살아있는 시간이 있어서  어세스 토큰이 유효한 동안만은 

어떤 활동을 할 수 있다는 거죠

 

차라리 리프레시 토큰을 관리해주는 테이블에

어세스 토큰을 넣는 컬럼을 추가해서

어떤 요청을 했을 때 그 테이블의 어세스 토큰을 대조를 계속 해주고 

어세스 토큰이 만료되면 어세스 토큰 재발급, 그리고 어세스토큰은 리프레시 토큰 테이블에 같이 넣어주면

 

다른 자리에서 로그인을 했다하면 

리프레시 토큰과 어세스 토큰을 즉시 무효화해서 기존자리에서 어떤 활동도 할 수 없게 만드는?

 

이렇게 구성해도 될까요

 

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

JWT를 명확하게 어떻게 사용해야한다는 가이드는 없습니다. 구현하기 나름인데요.
서버에서의 Token 관리 부분도 그러하구요.

한 명의 유저가 다른 머신에서 다시 JWT 토큰을 발급받았을 때 일반적인 웹서비스라면 모든 인증을 그대로 사용할것입니다. 한 명의 유저가 브라우저나 디바이스를 몇 개씩 사용하는 경우도 있을 테니깐요.

암튼 JWT 토큰은 기본적으로 서버에 저장하지 않습니다. 토큰 문자열 만으로 검증할 수 있기 때문인구요. DB 접근없이도 변조 여부와 만료 여부를 체크할 수 있죠.

그런데 만료되지 않은 토큰을 강제로 만료시키실려면 토큰을 서버 어딘가(db, redis, etc)에 저장하셔서, 매 요청 시마다 저장된 토큰에 대한 만료 여부를 체크해주셔야 합니다.

화이팅입니다. :-)

 

김동혁님의 프로필 이미지
김동혁
질문자

하긴 어플 환경에서는 어플이 껏다가 킨다고 다시 로그인 요청하면 힘드니깐

확실히 정적인 웹페이지보다는 강사님께서 말씀하신 다양한 기기에서 연결 유지를 위해서는

JWT 어세스  / 리프레시가 맞네요 

 

감사합니다.

김동혁님의 프로필 이미지
김동혁

작성한 질문수

질문하기