JWT (JSON Web Token) 구조
JWT는 세 부분으로 구성되어 있으며, 각 부분은 점(.)으로 구분됩니다:
xxxxx.yyyyy.zzzzz
1. Header (헤더)
- 토큰의 타입(typ)과 사용된 암호화 알고리즘(alg)을 정의
- Base64Url로 인코딩됨
예시:
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload (페이로드)
- 전달하려는 데이터를 포함
- Claims(클레임)이라고 불리는 정보의 조각들을 포함
- Base64Url로 인코딩됨
예시:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516239022
}
주요 클레임 종류
- Registered Claims: 미리 정의된 클레임 (iss, sub, exp, iat 등)
- Public Claims: 사용자 정의 클레임
- Private Claims: 당사자들 간에 정보를 공유하기 위한 사용자 정의 클레임
3. Signature (서명)
- 인코딩된 헤더와 페이로드를 비밀키로 해시하여 생성
- 토큰의 무결성을 검증하는데 사용
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
특징
- 각 부분은 Base64Url로 인코딩되어 URL에서 안전하게 전송 가능
- 서명을 통해 데이터 무결성 보장
- 자가 수용적(self-contained): 필요한 모든 정보를 토큰 자체에 포함
- Stateless: 서버에 별도의 세션 저장소가 필요 없음
주의사항
- 페이로드는 단순히 인코딩만 되어있어 누구나 디코딩 가능하므로 민감한 정보는 포함하지 않아야 함
- 토큰의 유효기간(exp)을 적절히 설정해야 함
- 비밀키는 안전하게 보관해야 함
'잡동사니' 카테고리의 다른 글
Docker Compose 파일 관련 (0) | 2025.01.08 |
---|---|
Swagger (1) | 2025.01.05 |
웹 - 스프링에서 카카오 로그인 연동하기 (0) | 2024.12.12 |
웹 서버와 WAS (3) | 2024.12.05 |
깃허브 - 단축키 모음 (0) | 2024.11.27 |
댓글