HTTP는 stateless이므로 사용자가 인증을 했는지 확인하기 위해서는 요청에 해당 정보를 포함해야한다
인증에 성공했을 때 백엔드가 응답에 access token을 포함하고 프론트엔드는 쿠키 등에 저장한다. 이후 요청 시 access token을 첨부해 전송하는 형태로 인증을 거친 사용자인지 확인할 수 있다
전송시 평문 데이터를 사용하면 해킹의 가능성이 있기 때문에, 암호화한 토큰을 사용해야한다
xxxxx.yyyyy.zzzzz
x = header, y = payload, z = signature
⚠️ signature외에는 암호화 되어있지 않으므로 민감한 데이터는 저장하지 않도록 해야한다 ⚠️
⚠️ JWT는 올바른 토큰인지에 대한 검증만하지 데이터 자체를 암호화하지 않는다 ⚠️
{
"alg": "HS256"
"typ": "JWT"
}
Base64URL : URL 주소로 사용가능하도록 URL에서 특별한 의미를 가지는 특수문자를 제외한 Base64
Base64 : 8비트 이진 데이터를 ASCII 영역 문자로만 이뤄진 문자열로 바꾸는 인코딩 방식
{
"user_id": 2
"exp" : 1539517391
}
pip install PyJWT
>>> import jwt
>>> data_to_encode = {'some': 'payload'}
>>> encryption_secret = 'secret'
>>> algorithm = 'HS256'
>>> encoded = jwt.encode(data_to_encode, encryption_secret, algorithm=algorithm)
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U'
>>> jwt.decode(encoded, encryption_secret, algorithms=[algorithm])
{'some': 'payload'}