Django

Token 인증_JWT(JSON Web Token)

끈끈 2023. 4. 21. 10:55

 

백엔드 개발자의 기본 소용

 

  1. 인증
  2. DB 관리
  3. Request에 따른 Response 처리 (API 개발)
  4.  배포

 


 

세션 기반 인증

모든 유저의 정보와 session 정보를 서버에서 관리

sessionid를 받아 브라우저(쿠키)에 저장

but, DB가 두개 이상이거나 서버가 두개 이상이라면?

 

토큰 기반 인증

  • 서버에 저장하지 않아 자원 절약 가능
  • 서버는 SECRET KEY로 암호화된 토큰을 전달
  • 사용자는 토큰으로 인증
  • 대표적인 방식 JWT

 

  • 클라이언트는 JWT를 브라우저(localStorage)에 저장
  • JWT가 만료되면 토큰 refresh
  • 사용자의 로그인을 확인해 secret key를 통해 Access token 발급
  • 클라이언트에 JWT 전달
  • 헤더에 JWT 전달
  • JWT 서명 체크
  • 클라이언트의 요청(Request)에 대한 응답(Response) 전달

 

 

JWT 토큰 종류

  • Access token : 요청을 보내기 위한 토큰
  • Refresh token : (토큰 만료시) 재발급을 위한 토큰

 

JWT 토큰 구조

  • 헤더 : algorithm & token type
  • 페이로드 : data
  • 서명 : verify signature (SECRET_KEY를 이용한 암호문)

 

"exp" : 토큰의 만료 시간
"iat" : 토큰의 발행 시간
"jti" : json token id

 

 

settings.py: (공식 문서 참조)

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(hours=2),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
}

 

 

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 

 

Getting started — Simple JWT 5.2.2.post16+gf298efa documentation

Cryptographic Dependencies (Optional) If you are planning on encoding or decoding tokens using certain digital signature algorithms (i.e. RSA and ECDSA; visit PyJWT for other algorithms), you will need to install the cryptography library. This can be insta

django-rest-framework-simplejwt.readthedocs.io

 

 

Customizing token claims — Simple JWT 5.2.2.post16+gf298efa documentation

Customizing token claims If you wish to customize the claims contained in web tokens which are generated by the TokenObtainPairView and TokenObtainSlidingView views, create a subclass for the desired view as well as a subclass for its corresponding seriali

django-rest-framework-simplejwt.readthedocs.io

 

토큰 인증 방식의 단점

 

  • db를 이용한 사용자 정보 조작이 어려울 수 있음
  • 토큰이 커질 수 있음
  • 토큰이 거의 모든 요청에 대해 전송될 경우 트래픽에 악영향