JWT란 JSON 형식을 이용하여 사용자에 대한 속성을 Claim이라는 포멧(”이름”)으로 저장하는 WebToken 기술이다.
말이 어렵지만 결론은 아래와 같이 사용자 속성을 가진 JSON 데이터를 암호화 한 토큰이라고 생각하면 되고, 각 사용자 속성을 claim이라 정의한다고 이해하면된다.
헤더는 토큰 타입, 사용된 signature 알고리즘에 대한 정보를 담고있다.
헤더는 일반적으로 JSON 포멧으로 표기되며, Base64Url로 인코딩되어 JWT의 첫 번째 부분을 구성한다.
{
"alg": "HS256",
"typ": "JWT"
}
페이로드는 토큰에 담길 실제 데이터를 의미한다. 각각의 데이터는 key:value 형태이며 Claim이라고 불린다.
클레임은 세 종류로 나뉜다.
{
"https://example.com/jwt/claims/user_email" : "email@email.com"
}
** 말이 좀 어려운데 JWT가 여러 시스템 또는 조직 간에 사용될 때, email과 같이 간단한 이름을 사용하면 클레임의 의미가 충돌 할 수 있다. 같은 email이지만 어느 시스템에서는 user_email을 또 다른 시스템에서는 company_email을 의미할 수 있기 때문이다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature는 발급자의 인증을 확인하기 위한 부분이다. 이를 생성하기 위해, Header와 Payload를 Base64Url로 인코딩한 뒤, 서버의 비밀 키를 사용하여 지정된 알고리즘으로 해시를 생성한다.