JWT는 Json Web Token의 약자로 토큰 기반 인증 시스템에서 활용되는 웹표준의 JSON 객체이다. JWT는 그 자체로 필요한 정보를 모두 갖고 있다. 웹서버의 경우 대부분 HTTP의 헤더에 넣어서 전달되거나, URL의 파라미터로 전달된다.
JWT는 .
을 기준으로 총 세 가지의 문자열로 구성되어 있다. header.payload.signature
이런 형태로 구성되어 있다.
Header는 두 가지의 정보를 갖고 있다. 먼저 typ은 토큰의 타입을 말한다. JWT의 경우 jwt가 될 것이다. 그리고 alg가 있다. alg는 해싱에 사용할 알고리즘을 말한다. 대부분 SHA-256 해싱 함수를 사용한다.
Payload에는 토큰에 담을 정보가 담겨있다. 이 정보들은 name/value의 쌍으로 이루어져있고 한 쌍을 Claim 클레임이라고 부른다. 클레임에는 총 3가지가 있다. Registered Claim 등록된 클레임 / Publick Claim 공개 클레임 / Private 비공개 클레임.
{
"iss": "mysite.com",
"exp": "1485270000000",
"https://mysite.com/is_admin": true,
"userId": "1234",
"username": "onikss793"
}
Header의 인코딩된 값과 Payload의 인코딩된 값을 함친 후, 정해둔 비밀키로 해시하여 만든다.
Signature의 설명에
"Payload의 인코딩된 값"이 두번 등장해요