JWT는 JSON Web Token의 약자로 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해주기 위한 token입니다.
JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다. 이 인증 과정을 통해 사용자는 로그인 상태로 우리 서비스를 돌아다닐 수 있습니다.
http 독립성(Stateless)때문에 토큰을 가지고 서버를 이동 하며 인증한다 !
1)HEADER: 사용한 해쉬알고리즘, 정보의 타입
2)PAYLOAD: 담을 내용
3)SIGNATURE: 서명
$ 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 결과의 타입에 따라 btyes
→ str
의 과정을 진행합니다.)
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