JWT(Json Web Token)
JSON 객체로서 당사자간 정보를 안전하게 전송하기 위한 컴팩트하고 자급자족적인 방법을 정의하는 개방형 표준(RFC 7519)이다.이 정보는 디지털 서명되어 있기 때문에 검증되고 신뢰할 수 있다.JWT는 비밀(HMAC 알고리즘으로) 또는 RSA 또는 ECDSA를 사용하여 공개/개인 키 쌍을 사용하여 서명할 수 있다.
쿠키와 세션과는 달리 서버가 아닌 클라이언트에 정보가 저장되기 때문에 메모리나 스토리지등을 통해 세선을 관리했던 서버의 부담을 덜 수 있게 되었다.
가장 큰 특징은 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함된다는 것으로 한번 발급된 이후 사용자의 정보를 변경하더라도 바로 반영되지 않는다.
JWT 사용 순서
JWT 구조
JWT는 3개의 구조로 구성된다.
따라서 일반적으로
xxxxx.yyyyy.zzzzz
이렇게 보인다.
JWT(header)
해더는 JWT토큰 유형과 HMAC SHA256 또는 RSA와 같이 사용중인 서명 알고리즘의 두 부분으로 구성된다.
{
"alg": "HS256",
"typ": "JWT"
}
이후 JSON은 Base64Url 인코딩되어 JWT의 첫 번째 부분을 형성한다.
JWT(payload)
페이로드는 클레임을 포함한다. 클레임에는 사용자의 데이터나 권한이 담겨있고 정보에 따라 registered, public, and private claims로 구분된다.
일반적으로는 private claims의 사용이 많다.
JWT(Signature)
해더와 페이로드를 대상으로 Base64 URL-safe Encodef를
적용하고 인코딩된 헤더, 인코딩된 페이로드, 비밀, 헤더에 지정된 알고리즘을 가져와 서명한다.
이러한 구조를 거치면 다음과 같은 인코딩된 값을 얻을 수 있다.