본문 바로가기

참고자료

JSON Web Token (JWT)

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 으로 직렬화한 문자열이라고 생각하면 된다. 

 

https://meetup.toast.com/posts/239