1. JWT(JSON Web Token) 알아보기
목차
- Spring-JWT(JSON Web Token) - 4. JWT 다루기
- Spring-JWT(JSON Web Token) - 3. Spring Security 적용하기
- Spring-JWT(JSON Web Token) - 2. 회원가입
- Spring-JWT(JSON Web Token) - 1. JWT 알아보기
참고
JWT 란?
JWT는 JSON Web Token의 약자로 사용자 정보와 데이터 속성과 같은 Claim 정보를 JSON 을 이용해 표현한 Web Token
JWT는 Token내에 필요한 모든 정보를 가지고 전달해주는 자가수용적인 특징이 있다
- JWT는 Header, Payload, Signature 세가지로 구성돼 있다.
- 각 부분은 Json 형태 로 이뤄져 있으며 base64로 인코딩 돼
.
로 나뉘어 구분된다.
Header
토큰 타입 과 암호 알고리즘 에 대한 정보가 담겨 있다.
alg
- Signature에서 사용하는 암호 알고리즘 에 대한 정보가 담겨 있다.
- 보통은
HMACSHA256(Hash-Based Message Authentication Code)
알고리즘을 사용하거나 공개키/개인키 방식인RSA 암호화 방식
도 사용한다
typ
- 토큰 타입을 지정한다.
- JWT(JSON Web Token)
Payload
Claim 정보를 담고 있다. Payload에 담기는 key-value 한쌍이 Claim이다.
Claim 이란 사용자 정보나 데이터 속성 정보를 의미한다.
Claim은 크게 Registered Claim, Public Claim, Private Claim 3가지로 구분이 된다.
Registered Claim
토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터이며, 선택적으로 작성이 가능하다.
Claim | Claim Name | 설명 |
---|---|---|
iss | issuer | 토큰 발급자 |
sub | subject | 토큰의 제목 |
aud | audience | 토큰 대상자 |
exp | expiration | 토큰 만료 시간, NumericDate 형식으로 작성 |
nbf | not before | 토큰 활성 날짜 : 이 날이 지나기 전까지 토큰이 활성화 되지 않는다. |
iat | issued at | 토큰 발급 시간 : 토큰 발급 이후의 경과 시간을 알 수 있다. |
jti | JWT ID | JWT 토큰 식별자 |
Public Claim
Public Claim은 사용자 정의 Claim으로, 보통 공개용 정보를 표현하기 위해 사용한다. 보통은 충돌 방지를 위해 URI 포맷을 이용해야 한다.
Private Claim
Public Claim이 아니면서 서버와 클라이언트 사이에서 임의로 정한 정보를 저장하기 위해 만들어진 Claim
Signature
Signature(서명) 은 Token 의 유효성 을 입증하기 위한 암호화된 코드다.
서명은 Base64 로 인코딩 된 Header 와 Payload 를 합친 후 비밀키(secrete key) 를 이용해 Header 에 정의된 알고리즘으로 해싱하고 결과를 Base64 로 인코딩해 생성한다.
JWT의 장점
JWT의 단점
- Token 탈취 위험이 남아 있다.
- JWT 는 결국 사용자에게 저장되는 값이기 때문에 Server 에서