JWT

2021-03-15

JWT에 관해 간략하게 정리했습니다.


JWT란?

JWTJSON Web Token의 약자로 웹표준 RFC 7519으로 지정되어있습니다.

JSON 객체를 이용해서 토큰 자체에 정보들을 저장하고있는 Web Token이라고 정의 할 수 있습니다.

이때 자가 수용적(Self-Contained)이라는 말을 하는데 저는 이것을 아래와 같다고 생각했습니다.

자가 수용적이란?

JWT는 토큰에 대한 기본 정보와, 전달할 정보, 그리고 Signature에 대한 정보들

즉, 토큰 자체에서 이것들을 해석하기 위해 필요한 정보들을 자체적으로 가지고 있다는 뜻입니다.

JWT 토큰 구성(Encoded)

JWT는 JSON 객체가 Base64 URL-Safe로 인코딩된 문자열입니다.

지금의 모습은 인코딩된 토큰의 모습입니다.

뭔가 정신없이 작성 되어있는 듯 보입니다.

색상이 구분되어 있는 것을 보면 나누어지는 기준이 (.)으로 구분됩니다.

사실 JWT는 3가지 파트로 나누어지며, 각 파트를 구분하는 것이 (.)입니다.

저것을 간략히 나타낸 모습은 아래와 같습니다.

순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)로 구성합니다.

JWT 토큰 구성(Decoded)

위에서 이야기한 헤더와 페이로드, 서명에는 각각 위에서 처럼 데이터들이 담겨있었습니다.

이제 각 부분에 대해서 살펴보겠습니다.

헤더는 2가지로 구성되어있습니다.

첫째는 토큰의 유형을 나타내는 typ입니다.

typ은 토큰의 타입을 지정합니다.

우리가 사용하고자 하는 타입은 JWT이기에 JWT로 세팅하면 됩니다.

두번째는 해싱 알고리즘을 지정하는 alg입니다.

알고리즘의 종류는 공식 홈페이지에서 가져왔습니다.

명확하게는 공식 홈페이지에서 아래로 내리면

각 언어별로 어떤 암호가 적용되는가와 기능을 알려줍니다.

위에 있던 예시에서는 HS256(HMAC SHA256)을 사용한 예시였습니다.

따라서 alg는 HS256으로 저장됩니다.

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

따라서 위와 같은 모습이 헤더에 나타나게 됩니다.

세 부분 중 첫 번째 부분에 대해서 알게 되었습니다.

나머지 부분에 대해서는 내일 조금 더 명확히 이해했을 때 작성하겠습니다..

참고자료

인프런 - Spring Boot JWT Tutorial

opennaru

https://jwt.io/

VELOPERT.LOG