JSON 웹 토큰 구조는 무엇입니까?
간단한 형태의 JSON 웹 토큰은 점( .)으로 구분된 세 부분으로 구성됩니다.
- 머리글
- 유효 탑재량
- 서명
따라서 JWT는 일반적으로 다음과 같습니다.
xxxxx.yyyyy.zzzzz
다른 부분을 분해합시다.
머리글
헤더는 일반적으로 토큰 유형(JWT)과 사용 중인 서명 알고리즘(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성됩니다.
예를 들어:
{
"alg": "HS256",
"typ": "JWT"
}
그런 다음 이 JSON은 Base64Url로 인코딩되어 JWT의 첫 번째 부분을 형성합니다.
유효 탑재량
토큰의 두 번째 부분은 클레임을 포함하는 페이로드입니다. 클레임은 엔터티(일반적으로 사용자) 및 추가 데이터에 대한 설명입니다. 클레임에는 등록된 클레임 , 공개 클레임 및 비공개 클레임 의 세 가지 유형이 있습니다 .
- 등록된 클레임 : 필수는 아니지만 유용하고 상호 운용 가능한 클레임을 제공하기 위해 권장되는 미리 정의된 클레임 집합입니다. 그들 중 일부는 iss (발급자), exp (만료 시간), sub (주제), aud (대상) 및 기타 입니다 .
- JWT가 컴팩트하기 때문에 클레임 이름은 3자에 불과합니다.
- 공개 클레임 : JWT를 사용하는 사람들이 마음대로 정의할 수 있습니다. 그러나 충돌을 방지하려면 IANA JSON 웹 토큰 레지스트리 에 정의하거나충돌 방지 네임스페이스를 포함하는 URI로 정의해야 합니다.
- 개인 클레임 : 사용에 동의한 당사자 간에 정보를 공유하기 위해 생성된 사용자 정의 클레임이며 등록 또는 공개 클레임이 아닙니다.
페이로드의 예는 다음과 같습니다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
그런 다음 페이로드는 Base64Url로 인코딩되어 JSON 웹 토큰의 두 번째 부분을 형성합니다.
서명된 토큰의 경우 이 정보는 변조로부터 보호되지만 누구나 읽을 수 있습니다. 암호화되지 않은 경우 JWT의 페이로드 또는 헤더 요소에 비밀 정보를 입력하지 마십시오.
서명
서명 부분을 생성하려면 인코딩된 헤더, 인코딩된 페이로드, 비밀, 헤더에 지정된 알고리즘을 가져와서 서명해야 합니다.
예를 들어 HMAC SHA256 알고리즘을 사용하려는 경우 서명은 다음과 같은 방식으로 생성됩니다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
서명은 도중에 메시지가 변경되지 않았는지 확인하는 데 사용되며 개인 키로 서명된 토큰의 경우 JWT 발신자가 누구인지 확인할 수도 있습니다.
모두 합치기
출력은 HTML 및 HTTP 환경에서 쉽게 전달할 수 있는 점으로 구분된 3개의 Base64-URL 문자열이며 SAML과 같은 XML 기반 표준과 비교할 때 더 작습니다.
다음은 이전 헤더와 페이로드가 인코딩되고 암호로 서명된 JWT를 보여줍니다.
JWT를 사용하고 이러한 개념을 실행하려는 경우 jwt.io 디버거를 사용하여 JWT를 디코딩, 확인 및 생성할 수 있습니다.