JWT는 Claim기반의 토큰으로 두 개체에서 JSON 객체를 사용하여 가볍고 자가 수용적인 (self-contained) 방식으로 정보를 안전하게 전달해 줍니다.
XML 웹 토큰인 SWT, SAML에 비해 JSON 웹 토큰인 JWT는 덜 장황하고 인코딩되면 크기가 작고, HTML, HTTP 환경에서 유리합니다.
{
"typ": "JWT",
"alg": "HS256"
}
{
"iss": "codesoom.com",
"exp": "1722290000000",
"https://codesoom.com/claims": true,
"userId": "JamieShin",
"username": "Jamie"
}
여기서 클레임은 크게 세 분류로 나뉘어져 있습니다.
등록된 클레임 : iss, sub, aud, exp 등이 있으며 서비스에 필요한 정보가 아닌 토큰에 대한 정보를 담기 위해 이미 정해진 클레임들 입니다.
{
"iss": "codesoom.com",
"exp": "1722290000000",
}
공개 클레임 : 공개용 정보를 위해 사용되며, 충돌 방지를 위해 URI 포맷을 이용합니다.
{
"https://codesoom.com/claims": true
}
비공개 클레임 : 보통 클라인언트와 서버간의 협의하에 사용되는 클레임 이름들 입니다. 공개 클레임과 달리 이름이 중복될수 있으니 사용에 유의해야 합니다.
{
"userId": "JamieShin",
"username": "Jamie"
}
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
마지막으로 생성된 토큰은 HTTP 통신을 할 때 HTTP Header의 Authorization필드에 담겨서 보내집니다. 참고로 Bearer는 인증스킴으로 OAuth를 위해서 고안된 방법이고, RFC6750에 표준 명세서가 있습니다.
{
"Authorization": "Bearer {생성된 토큰 값}",
}
참고