본문 바로가기
Back/Spring

[Spring/Security] JWT (JSON Web Token)

by 오엥?은 2023. 6. 26.
반응형

📌 JWT (JSON Web Token)

JWT 란?

JWT는 당사자간에 정보를 JSON 객체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의 하는 개방형 표준이다. 이 정보는 디지털 서명이 되어 있으므로 확인하고 신뢰할 수 있다. JWT 는 비밀(HMAC 알고리즘 사용) 또는 RSA 또는 ECDSA를 사용하는 공개/개인키 깡을 사용하여 서명할 수 있다.

 

JWT를 암호화하여 당사자 간에 비밀성을 제공할 수도 있지만 여기서는 서명된 토큰에 중점을 둘 것이다. 서명된 토큰은 그 안에 포함된 정보, 요구사항 등의 무결성을 확인할 수 있는 반면 암호화된 토큰은 다른 당사자로부터 해당 클레임을 숨긴다 . 공개/개인 키 쌍을 사용하여 토큰에 서명할 때 서명은 개인 키를 보유한 당사자만이 서명한 당사자임을 인증한다.

 

 JWT 의 구조

간단한 형태의 JSON 웹 토큰은 점( .)으로 구분된 세 부분으로 구성된다.

  • 머리글
  • 유효 탑재량
  • 서명

따라서 JWT는 일반적으로 다음과 같다.

xxxxx.yyyyy.zzzzz

 

헤더 (Header)

헤더는 일반적으로 토큰 유형(JWT)과 사용 중인 서명 알고리즘(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성된다.

{
  "alg": "HS256",
  "typ": "JWT"
}

그런 다음 이 JSON은 Base64Url로 인코딩되어 JWT의 첫 번째 부분을 형성한다.

 

 

페이로드(정보) (PayLoad)

토큰의 두 번째 부분은 정보를 포함하는 페이로드다. 클레임은 엔터티(일반적으로 사용자) 및 추가 데이터에 대한 설명이다. 클레임에는 등록된 클레임 , 공개 클레임 및 비공개 클레임 의 세 가지 유형이 있다 .

 

페이로드의 예는 다음과 같다.

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

그런 다음 페이로드는 Base64Url로 인코딩되어 JSON 웹 토큰의 두 번째 부분을 형성한다.

 

 

서명 (Signiture)

서명 부분을 생성하려면 인코딩된 헤더, 인코딩된 페이로드, 비밀, 헤더에 지정된 알고리즘을 가져와서 서명해야 한다.

예를 들어 HMAC SHA256 알고리즘을 사용하려는 경우 서명은 다음과 같은 방식으로 생성된다.

 

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

서명은 도중에 메시지가 변경되지 않았는지 확인하는 데 사용되며 개인 키로 서명된 토큰의 경우 JWT 발신자가 누구인지 확인할 수도 있다.

 

 

 

 

 

 

참고  https://jwt.io/introduction

반응형