백엔드 Backend/기본 개념
JWT 토큰
달래dallae
2024. 8. 8. 17:21
JWT는 Json Web Token의 줄임말입니다.
구조
아래의 3가지로 구성되어있으며, 점으로 구분되는 데이터입니다.
- Header
- Payload
- Signature
1. Header
일반적으로 토큰 유형과 사용중인 서명 알고리즘(Hmac, Sha256,Sha512...)가 포함
{
"typ" : "JWT"
"alg" : "SHA256"
}
2. Payload
등록된 클레임과 개인 클레임 등으로 이루어짐.
- 등록된 클레임(필수아님) : iss(발행자), exp(만료시간), sub(제목), aud(대상)
- 개인 클레임 : 정보 공유를 위한 사용자 지정 클레임
{
"iss" : "dallae.log"
"sub" : "about Jwt"
"exp" : "165489753"
...
"username" : "dallae"
"isAdmin" : true
}
3. Signature
Header, Payload, SecretKey를 합쳐 암호화 한 결과값입니다.
SHA256 ( base64UrlEncode(header) + "." + base64UrlEncode(payload), secretKey )
동작 예시
- 유저가 id와 password를 서버로 전송한다.
- 서버는 id와 password를 검증한 후, 맞다면 비밀키로 암호화한 토큰을 만들어 유저에게 전달한다.
- 유저는 이 토큰을 헤더에 담아, 앞으로 모든 요청에 함께 보낸다.Authorization: Bearer header.payload.signature
- 서버는 모든 요청에 대해 토큰으로 사용자를 인증한다.
즉, 세션과 같은 방식은 서버에 저장되는 것으로 부담이 생기는데 이를 최소화할 수 있습니다.
단, payload(claim)의 정보가 많으면 토큰이 지나치게 길어지며 중요한 데이터는 넣지 못한다는 단점이 있습니다.