본문 바로가기

프로그래밍/JWT

[JWT] JWT (JSON Web Token)

반응형

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 인코딩·디코딩 사이트

https://jwt.io/

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 
 
 
다음 글 : JAVA 언어로 JWT 구현하기

반응형