반응형
JWT (JSON Web Token) 란
JSON Web Token의 약자로, 데이터를 안전하게 전송하기 위한 토큰 형식
웹에서 정보를 주고받을 때 사용되고, 사용자 인증과 관련된 정보를 안전하게 전송하는데 사용
JWT 구조
1. Header
- alg : 토큰을 서명하는 알고리즘
- typ : 토큰의 유형
{
"alg" : "HS256",
"typ" : "JWT"
}
2. Payload : 클레임(Claim) 정보
- sub : 토큰의 주제 및 사용자의 고유 식별자
- name : 사용자의 이름
- iss : 토큰을 발급한 엔터티(서버)의 식별자
- aud : 토큰의 대상(수신자)
- exp : 토큰의 만료시간 (UNIX 타임스탬프 사용)
- nbf : 토큰이 사용이 허용되는 시간 (UNIX 타임스탬프 사용)
- iat : 토큰이 발급된 시간 (UNIX 타임스탬프 사용)
- jti : 토큰의 고유 식별자
{
"sub" : "999999999",
"name" : "mj",
"iss" : "issuer",
"aud" : "audience",
"exp" : 465423523,
"nbf" : 454685234,
"iat" : 654651235,
"jti" : "455656542e-afew8465sd-fweewsd"
}
3. Signature
- 헤더와 페이로드 조합
- 상기에 작성된 JWT의 헤더와 페이로드를 Base64 인코딩한 문자열 생성
- 이 문자열은 `header.payload` 형태
- 비밀 키와 해싱
- 선택된 알고리즘에 따라 비밀 키를 사용하여 헤더와 페이로드의 조합 해싱
- Base64 인코딩
- 해싱된 결과를 Base64 인코딩하여 문자열로
- 시그니처 추가
- 최종적으로 생성된 Base64 인코딩된 문자열을 토큰의 마지막 부분에 시그니처로 추가
- 최종적 문자열은 `header.payload.signature`
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiI5OTk5OTk5OTkiLCJuYW1lIjoibWoiLCJpc3MiOiJpc3N1ZXIiLCJhdWQiOiJhdWRpZW5jZSIsImV4cCI6NDY1NDIzNTIzLCJuYmYiOjQ1NDY4NTIzNCwiaWF0Ijo2NTQ2NTEyMzUsImp0aSI6IjQ1NTY1NjU0MmUtYWZldzg0NjVzZC1md2Vld3NkIn0
.rM012J5cnWKFpBZP-9cGCUtBNrKip08m-TDoGIDZduM
JWT 인코딩·디코딩 사이트
JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
jwt.io
다음 글 : JAVA 언어로 JWT 구현하기
반응형