TIL 19 JWT(JSON Web Token)

CastleQ·2021년 6월 3일
0

인증&인가

목록 보기
3/3

JWT란?

JWT는 JSON Web Token의 약자로 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해주기 위한 token입니다.

JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다. 이 인증 과정을 통해 사용자는 로그인 상태로 우리 서비스를 돌아다닐 수 있습니다.

http 독립성(Stateless)때문에 토큰을 가지고 서버를 이동 하며 인증한다 !

JWT의 구조

1)HEADER: 사용한 해쉬알고리즘, 정보의 타입
2)PAYLOAD: 담을 내용
3)SIGNATURE: 서명

How to use JWT?

$ pip install pyjwt 

제이슨을 설치한다.
파이썬 인터프리티를 실행한다.

import jwt #패키지명은 pyjwt이지만 임포트할때의 이름은 jwt입니다.

SECRET = 'secret' #'랜덤한 조합의 키' 예제이므로 단순하게 'secret'이라고 하겠습니다.

access_token = jwt.encode({'id' : 1}, SECRET, algorithm = 'HS256')
print(access_token)
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'

JWT의 작성 rule
jwt.encode({<유저정보>}, <시크릿키>, algorithm = '특정 알고리즘')

발행된 토큰을 요청받은 클라이언트에게 넘겨주면 되는데
jwt의 결과물은 pyjwt의 버전에 따라 bytes(ver. 1.7)타입 또는 str(ver. 2.0 이상)타입이다.
(본인이 설치한 pyjwt의 버전을 확인하고, jwt의 ecode 결과의 타입에 따라 btyesstr 의 과정을 진행합니다.)
2.0이상의 버전이라면 디코딩 과정을 거치지 않고 전달이 가능하다.

header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)
{'id': 1}

bcrypt와는 다르게 JWT는 디코딩했을 때 암호화된 임의의 문장이 아닌
던져줬던 유저정보가 반환된다.

참고자료
위코드 노션 자료
https://velopert.com/2389
https://velog.io/@geunwoobaek/JWT%EB%9E%80
https://velog.io/@devmin/bcrypt-jwt-basic

profile
DONE IS BETTER THAN PERFECT

0개의 댓글