JWT

GreenBean·2021년 5월 5일
0
post-thumbnail

JWT

PyJWT description

JWT(Json Web Token)는 회원 로그인이 완료 되었을때 발행되는 토큰

JWT에는 암호화 된 회원정보가 들어있으며 복호화를 통해 사이트내의 서비스를 사용할 수 있는지 확인(인가 : Authorizationathon)하는데 사용

JWT의 구조

JWT는 헤더(header), 정보(payload), 서명(signature) 구조로 이루어져 있음

  • Header : Header에는 typalg이 들어있음
    • typ은 타입으로 JWT가 타입이고, alg에는 algorithm이 들어가게 됨
  • Payload : Payload는 토큰에 담을 내용이 담겨있음
    • 내용은 여러개의 claim으로 이루어짐
    • claim은 name:value 쌍으로 되어있으며 그 종류로는 세가지가 있음
      • registered claim : 토큰에 대한 정보를 담기 위해 이미 정해진 claim
      • public claim : 충돌을 방지하기 위한 이름을 가지고 있음
      • private claim : 등록 되있지도, 공개 되지도 않은 claim
  • Signature : Siganture는 Secret Key를 포함하여 암호화되어있음
    • Header의 인코딩값과 Payload의 인코딩값을 합친 후 Secret Key로 해쉬함

실행 순서

  1. 가상환경 설치 및 실행
conda create -n auth python=3.9
conda activate auth
  1. PyJWT 설치
pip install pyjwt 
  1. Python 실행
python
  1. library import
import jwt

Secret Key & Algorithm

JWT를 사용할 때는 SECRET_KEY(절대 공개되면 안되는 값)과 ALGORITHM이 필요

# my_settings.py
SECRET_KEY = 'SECRET'
ALGORITHM  = 'HS256'

Tip! SECRET_KEY와 ALGORITHM은 분리된 파일에 보관하여 Import하여 사용
(시크릿키는 필수! 알고리즘은 선택)
SECRET_KEY가 담긴 파일은 꼭 .gitignore에 포함하여 git에 업로드 되지 않도록 주의


PyJWT Usage

>>> import jwt
>>> encoded_jwt = jwt.encode({"some": "payload"}, "secret", algorithm="HS256")
>>> encoded_jwt
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U
>>> jwt.decode(encoded_jwt, "secret", algorithms=["HS256"])
{'some': 'payload'}
  • Example
>>> import jwt
>>> SECRET = 'secret'
>>> access_token = jwt.encode({'id': 1}, SECRET, algorithm = 'HS256')
>>> access_token
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
  • 이렇게 만들어진 token은 JsonResponse로 전달 가능
    • 보내진 token은 로컬 스토리지나 세션 스토리지 또는 쿠키에 저장됨
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글