JWT는 당사자 간에 정보를 JSON 형태로 안전하게 전송하기 위한 토큰 입니다. JWT는 URL로 이용할 수 있는 문자열로만 구성돼 있으며, 디지털 서명이 적용돼 있어 신뢰할 수 있습니다. URL에서 사용할 수 있는 문자열로만 구성돼 있기 때문에 HTTP 구성요소 어디든 위치할 수 있습니다.
JWT의 구조
JWT는 점(.)으로 구분된 아래의 세 부분으로 구성됩니다.
- 헤더(Header)
- 내용(Payload)
- 서명(Signature)
XXXXX.YYYYY.ZZZZZ
헤더 . 내용 . 서명
1) 헤더(header)
- 헤더는 검증과 관련된 내용을 담고 있습니다.
- alg 속성은 해싱 알고리즘을 지정
- typ은 토큰의 타입을 지정
{
"alg": "HS256",
"typ": "JWT"
}
2) 내용(payload)
- 토큰에 담는 정보를 포함
- 내용에 포함된 속성들을 '클레임'
- 등록된 클레임(Registered Claims) : 필수는 아니지만 토큰에 대한 정보를 담기 위해 이미 이름이 정해져 있는 클레임
- 공개 클레임(Public Claims) : 키 값을 마음대로 정의할 수 있음
- 비공개 클레임(Private Claims) : 통신 간에 상호 합의되고 둘 다에 속하지 않는 클레임
* 등록된 클레임 *
iss : JWT의 발급자(Issuer) 주체
sub : JWT의 제목(Subject)
aud : JWT의 수신인(Audience)
exp : JWT의 만료 시간(Expiration)
nbf : Not Before를 의미
iat : JWT가 발급된 시간(Issued at)
jti : JWT의 식별자(JWT ID)
{
"sub": "wikibooks payload",
"exp": "1602076408",
"userId": "wikibooks",
"username": "flature"
}
3) 서명(signature)
- 인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성 값을 가져와 생성됩니다.
'Spring' 카테고리의 다른 글
[Spring] 생성(Creational) 패턴 - 추상 팩토리 (0) | 2024.11.13 |
---|---|
[Spring] SpringSecurity - JWT (0) | 2024.11.11 |
[Spring] Servlet Filter 란? (1) | 2024.11.10 |
[Spring] SpringSecurity - Filter Chain (0) | 2024.11.10 |
[Spring] Servlet Container와 Servlet의 관계 (1) | 2024.11.10 |