jwt는 Header 와 Payload , Signature 이 세 부분으로 구성되어 있고 각 부분은 . 으로 구분한다.
JWT를 검증하는데 필요한 정보를 가진 JSON 객체는 Base64 URL-Safe 인코딩된 문자열이다.
1.Header
헤더는 JWT를 검증방법에 대한 내용을 담고 있다.
{
"alg": "ES256", // 서명시 사용하는 알고리즘
"kid": "Key ID" //서명시 사용하는 public/private key 식별값
}
위와 같은 JSON이 직렬화 되었을때 이것을 UTF-8 과 Base64 URL-Safe 인코딩하면 헤더가 생성된다.
2. Payload
JWT의 내용에 해당
Payload 에 있는 속성들을 Claim Set 이라고 부른다. Claim Set 의 내용은 클라이언트와 서버간 주고 받기로 한 값이다.
클라이언트(= 토큰 생성자)의 정보나 생성일시 등이 그 예이다.
{
"iss": "jinho.shin", //사용자
"iat": "1586364327" //비밀키
}
3.Signature(서명)
서명은 헤더의 alg에 정의된 알고리즘과 비밀키를 이용해 생성하고 Base64 URL Safe 로 인코딩한 값이다.
헤더와 페이로드를 합친 문자열을 서명한 값이기도 하다.
4. JWT를 사용하는 이유
JWT는 일종의 데이터 format 이다.
URL, Cooke, Header 와 같이 사용할 수 있는 문자가 제한된 환경에서 정보를 주고 받을 수 있다.
JWT 는 JWS( JSON Web Signature ) 와 JWE ( JSON Web Encryption ) 을 사용한다.
JWS 와 JWE 가 JWT의 하위 명세이다.
그리고 이들의 하위명세는 JWK (JSON Web Key) 와 JWA ( JSON Web Algorithm ) 이다.
아까 Signature 라는 단어가 있었듯이. 우리가 일반적으로 사용하는 대부분의 JWT는 JWS 이다.
그냥 JWT는 JWS를 사용하고 JWS의 JWS Compact Serializtion 으로 직렬화한 문자열이라고 생각하면 된다.
'참고자료' 카테고리의 다른 글
FrameWork 와 SpringFrameWork (0) | 2021.08.27 |
---|---|
Request 의 방식의 종류 (0) | 2021.07.06 |
쿠키, 세션, 캐시 (0) | 2021.07.06 |
프로세스와 스레드란? (0) | 2021.07.03 |
JAVA - 추상메소드와 추상클래스 그리고 인터페이스는 왜 쓰는걸까? (0) | 2021.07.02 |