1. JWT (Json Web Token)이란?


[JWT 개념]

JWT(JSON WEB TOKEN)이란 Json 포맷을 이용하여 사용자에 대한 속성으 저장하는 Claim 기반의 Web Token이다.

JWT는 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.

주로 회원인증이나 정보전달 사용한다.

 

 

2. JWT 구조


[JWT 개념]

JWT의 구조는 3가지 부분으로 이루어지며 각각 Json 형태인 각부분은 Base64URl로 인코딩 되어 표현된다.

또한 각부분을 이어주기 위해 .(점)을 구분자로 사용한다.

  • Header (헤더)
  • Payload (페이로드)
  • Signature (서명)

JWT의 구조

 

1. Header

구조는 typ와 alg로 구성됨

  • typ : 토크의 타입지정 ex) JWT
  • alg : 알고리즘 방식을 지정하며, Signature(서명) 및 토큰 검증에 사용됨 ex) H256(SHA256) or RSA

 대표적으로 사용되는 알고리즘 (alg)은 아래의 리스트들이 있다

  • HMAC
  • SHA256
  • RSA
  • HS256 OR RS256
{
  "alg" : "HS256",
  "typ" : "JWT"
}

 

 

2.Payload

토큰에서 사용할 정보의 조각들인 Claim(클레임)이 담겨 있다. 
Claim은 name/value의 한 쌍으로 이루어져 있다.
{
  "sub": "1234567890", // 등록된 플레임
  "name": "John Doe", // 비공개 플레임
  "iat": 1516239022  // 등록된 플레임
}​

Claim은 3가지로 나누어 진다
  • 등록된 클레임 (Registered)
  • 공개 클레임 (Public)
  • 비공개 클레임 (Private)
1. 등록된 클레임 (Registered Claim) 
토큰의 정보를 표현 하기 위해 이미 정해진 종류의 데이터 (7종류가 있다)
선택적으로 작성가능 하며, key의 길이는 간결성을 위해 String이 3의 길이이다.
  • iss : 토큰 발급자 (issuer)
  • sub : 토큰의 제목 (subject) - unique한 값 사용, 사용자의 email 주로 사용
  • aud : 토큰의 대상자 (audience)
  • nbf : 토큰 활성날짜 (notbefore) - 이날이 지나기전 토크 활성화 되지 않음
  • exp: 토큰 만료시간 (expiration) - numericDate형식으로 되어 있어야함
  • iat : 토큰 발급시간 (issued at) - 토큰 발급 이후의 경과시간을 알 수 있음
  • jti : JWT 토큰 식별자 (JWT Id) -  중복 방지를 위해 사용, 일회용토큰(access Token)등에 사용됨

2. 공개 클레임 (Public Claim)
사용자 정의 클레임
공개용 정보를 위해 사용하며 충돌방지를 위해 Url 포맷을 이용
{
  "https:yongoh1253.tistory.com":true
}


3. 비공개 클레임 (Private Claim)
사용자 정의 클레임
서버와 클라이언트 사이에 임의로 지정한 정보를 저장

{
  "name": "John Doe"
}​

 

3. Signature (서명)

토큰을 인코딩하거나 유효성 검증을 할때 사용하는 고유화한 암호화 코드
Header와 Payload의 값을 각각 Base64Url로 인코딩하고 인코딩한 값을 다시 비밀키를 이용해 Header에서 정의한 알고리즘으로 해싱하고 이 값을 다시 Base64Url로 인코딩하여 생성
생성된 토큰은 Http 통신을 할때 'Authorization'이라는 key의 value로 사용
→ 일반적으로 value앞에 'Bearer '이 붙음
{
  "Authorization" : "Bearer {생성된 토큰 값}"
}

 

 

'jwt' 카테고리의 다른 글

jwt를 이용한 개발 시 이해한 내용 정리  (0) 2024.01.07

+ Recent posts