JSON Web Token(JWT)은 웹표준(RFC7519)으로서 두 개체에서 JSON객체를 사용하여 가볍고 자가수용적인(self-contained)방식으로 정보를 안전성 있게 전달해준다.
JWT는 어떤 상황에서 사용될까?
회원 인증
정보 교류
JWT 구조
1.헤더(Header)
typ: 토큰의 타입을 지정한다. ex) 'typ': 'JWT'
alg: 해싱 알고리즘을 지정한다. 해싱 알고리즘은 보통 HMAC SHA256, RSA가 사용되며, 이 알고리즘은, 토큰을 검증 할 때 사용되는 signature부분에서 사용된다.
{
"typ": "JWT"
"alg": "HS256"
}
클레임(Claim)
이라고 부른다. 페이로드에는 어떤 정보에 접근 가능한지에 대한 권한을 담을 수도 있고, 사용자의 유저이름 등 필요한 데이터는 이곳에 담아 암호화 시킨다. 하지만 민감한 정보는 되도록 담지 않는 것이 좋다.클레임(Claim)의 3종류
등록된(registered) 클레임
공개(public) 클레임
비공개(private) 클레임
등록된 클레임
iss (Issure, 토큰 발급자)
sub (Subject, 토큰 제목)
aud (Audience, 토큰 대상자)
exp (Expiraton Time, 토큰 만료시간)
nbf (Not Before, 토큰 활성될 날짜)
iat (Issued At, 토큰 발급된 시간)
jti (JWT ID, 중복 방지를 위한 고유 식별자)
공개 클레임
공개 클레임은 JWT를 사용하는 사람들이 마음대로 정의 할 수 있지만, 충돌을 방지하기 위해서는 URI형식으로 작성해야한다.
{
"https://example.com/jwt_claims/is_mine": true
}
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)