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)의 정보가 많으면 토큰이 지나치게 길어지며 중요한 데이터는 넣지 못한다는 단점이 있습니다.
'백엔드 Backend > 기본 개념' 카테고리의 다른 글
실시간 통신 기능 (1) (0) | 2024.08.14 |
---|---|
캐시 / 캐시 전략 (1) | 2024.08.12 |
final 키워드 사용하기 (0) | 2024.08.08 |
SSH Key 동작 원리 (0) | 2024.08.08 |
예외 이해하기 (0) | 2024.08.08 |