Spring-JWT(JSON Web Token) - 1. JWT 알아보기

1. JWT(JSON Web Token) 알아보기

목차

참고

JWT 란?

JWT는 JSON Web Token의 약자로 사용자 정보데이터 속성과 같은 Claim 정보를 JSON 을 이용해 표현한 Web Token
JWT는 Token내에 필요한 모든 정보를 가지고 전달해주는 자가수용적인 특징이 있다

  • JWT는 Header, Payload, Signature 세가지로 구성돼 있다.
  • 각 부분은 Json 형태 로 이뤄져 있으며 base64로 인코딩 돼 .로 나뉘어 구분된다.

JWT

토큰 타입암호 알고리즘 에 대한 정보가 담겨 있다.

  • alg

    • Signature에서 사용하는 암호 알고리즘 에 대한 정보가 담겨 있다.
    • 보통은 HMACSHA256(Hash-Based Message Authentication Code) 알고리즘을 사용하거나 공개키/개인키 방식인 RSA 암호화 방식 도 사용한다
  • typ

    • 토큰 타입을 지정한다.
    • JWT(JSON Web Token)

JWT Header

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

JWT Payload

Signature

Signature(서명) 은 Token 의 유효성 을 입증하기 위한 암호화된 코드다.

서명은 Base64 로 인코딩 된 Header 와 Payload 를 합친 후 비밀키(secrete key) 를 이용해 Header 에 정의된 알고리즘으로 해싱하고 결과를 Base64 로 인코딩해 생성한다.

JWT Signature

JWT의 장점

JWT의 단점

  • Token 탈취 위험이 남아 있다.
  • JWT 는 결국 사용자에게 저장되는 값이기 때문에 Server 에서
Share