본문 바로가기
Spring/Spring Security

[Spring Security] JWT (Json Web Token)

by seoyamin 2023. 2. 11.

 

https://jwt.io/introduction

 

JWT.IO

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

jwt.io

 

1. JWT (Json Web Token) ?

전달하는 데이터를 Json 객체 형태로 안전하게 보내기 위한 표준을 JWT라고 한다.

이때, JWT는 RSA, HMAC  알고리즘을 이용하여 공개키/개인키로 서명되어 있으므로 신뢰할 수 있다.

따라서 '암호화' + '서명된' 정보를 전달할 수 있다. 

 

2. JWT의 사용 용도

2-1. Authorization

 

2-2. 정보 교환

 

 

3. JWT의 구조

JWT는 Header, Payload, Signature로 이루어져 있다.  xxxxx.yyyyy.zzzzz 

 

3-1. Header

Header는 algtyp으로 이루어진 JSON 형태이며, 이 JSON은 Base64Url로 인코딩 되어있다.

* alg :  어떤 알고리즘을 이용해서 서명했는지

* typ :  토큰 유형

 

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

 

3-2. Payload

Payload는 전달하고자 하는 정보를 담고있다.

 

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

 

3-3. Signature (서명)

Signature에서는 header, payload, secret 키를 HMACSHA256으로 암호화한다.

이때, 각각의 header, payload, secret key는 Base64로 암호화 되어있고,

이들을 모두 모아서 HS256으로 암호화한게 Signature이다.

 

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

 

 

4. JWT의 동작 원리