inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

JWT 인증

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

299

김동혁

작성한 질문수 48

0

현재 구성해놓은게

 

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

 

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

 

그리고 프론트엔드에서는

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

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

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

 

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

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

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

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

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

 

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

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

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

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

 

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

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

 

이렇게 구성해도 될까요

 

python django docker react

답변 1

1

이진석

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

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

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

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

화이팅입니다. :-)

 

0

김동혁

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

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

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

 

감사합니다.

안녕하세요.

0

62

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

285

1

useEffect 훅에서 else 유무에 따른 결과

0

222

1

useAxios 훅의 dependency array 설정

0

254

1

useEffect에서 변수 업데이트 관련 질문

0

390

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

276

1

bootstrap4

0

481

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

374

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

578

3

useState는 필수일까요?

0

272

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

611

4

Django allauth를 사용한 소셜 로그인 시 에러

0

660

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

569

2

useLocalStorage() 함수 사용여부

0

238

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

454

1

리듀서의 의미 재확인

0

439

1

simple-jwt Refresh Token 사용 노하우

0

907

2

docker compose 를 통한 배포 관련 오류 문의

0

686

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

372

1

is_like_user

0

238

1

related_name 오류

0

278

1

re_path 오류

0

265

1

re_path url

0

255

1

No post matches the given query

0

671

2