코드 그라데이션

JWT 개념 발췌 본문

Spring/핵심 가이드

JWT 개념 발췌

완벽한 장면 2023. 1. 15. 01:47

인증 : Authentication

인가 : Authorization

 

참고도서 : 스프링 부트 핵심 가이드(장정우 저)

 

JWT

(JSON Web Token) : 당사자 간에 정보를 JSON 현태로 안전하게 전송하기 위한 토큰

 

- JWT URL로 이용할 수 있는 문자열로만 구성되어 있으며, 디지털 서명이 적용되어 있어 신뢰할 수 있다.

- JWT는 주로 서버와의 통신에서 권한 인가를 위해 사용한다.

- URL에서 사용할 수 있는 문자열로만 구성되어 있기 때문에 HTTP 구성요소 어디든 위치할 수 있다.

 

 

 

JWT의 구조

헤더(Header)

내용(Payload)

서명(Signature)

 

헤더에는 검증과 관련된 내용이 담겨 있다. 두 가지 정보가 포함되어 있는데, alg typ 속성이다.

 

1) alg에서는 해싱 알고리즘을 지정한다.

- 이것은 보통 SHA256 또는 RSA를 사용하며, 토큰을 검증할 때 사용되는 서명 부분에서 사용한다.

- 아래 예제의 HS256 "HMACSHA256" 알고리즘을 사용한다는 뜻

 

2) typ 속성에는 토큰의 타입을 지정한다.

내용에는 토큰에 담는 정보를 포함한다.

- 이곳에 포함된 속성들은 클레임(claim)이라고 하며, 크게 세 가지로 분류된다.

 

   1) 등록된 클레임(Registered Claim)

    - 필수는 아니지만 토큰에 대한 정보를 담기 위해이미 이름이 정해져 있는 클레임을 뜻한다.

* iss : JWT의 발급자(issuer) 주체를 나타낸다. iss의 값은 문자열이나 URI를 포함하는 대소문자를 구분하는 문자열이다.

* sub : JWY의 제목(Subject)이다.

* aud

: JWT의 수신인(Audience)이다. JWT를 처리하려는 각 주체는 해당 값으로 자신을 식별해야 한다. 요청을 처리하는 주체가 'aud' 값으로 자신을 식별하지 않으면, JWT는 거부된다.

* exp : JWT의 만료시간(Expiration)이다. 시간은 NumericDate형식으로 지정해야 한다.

* nbf : Not Before을 의미한다.

* iat : JWY가 발급된 시간(Issued at)을 의미한다.

* jti : JWT의 식별자(JWT ID)이다. 주로 중복 처리를 방지하기 위해 사용된다.

 

   2) 공개 클래임(Public Claim)

   - 키 값을 마음대로 정의할 수 있다. 다만 충돌이 발생하지 않을 이름으로 정의해야 한다.

 

   3) 비공개 클래임(Private Claim)

   - 통신 간에 서로 합의되고 등록된 클래임과 공개된 클레임이 아닌 클레임을 의미한다.

 

서명

- JWT의 서명 부분은 인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성값을 가져와서 생성된다.

 
728x90
Comments