Git & CS

JSON Web Token?

승민아 2024. 1. 18. 16:05

JWT는 서명된 토큰에 중점을 둔다.

즉, JWT 토큰은 내가 쓴게 맞어라는 서명의 용도로 사용하는 것이다.

 

Authorization에 사용

사용자가 성공적인 로그인한 이후에 우린 JWT 토큰을 응답으로 준다.

사용자는 이 토큰을 가지고 허용된 리소스에 접근할 수 있는 것이다.

 

JWT 구조

JWT는 3 파트로 나눠지며 각 파트는 . 으로 구분된다.

xxxxx.yyyyyy.zzzzz 구조를 갖는 것이다.

 

 

다음은 3 파트를 설명한다.

 

1. Header

보통 서명에 사용된 알고리즘과 토큰 유형을 갖는다.

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

 

이 내용 JSON은 Base64Url로 인코딩되어 JWT의 첫번째 부분을 차지한다.

 

2. Payload

Playload는 Claim을 포함한다. 나중에 JWT 토큰을 만들며 Claim을 빌드하는 과정이 있는데 아하싶다.



클레임 종류가 다양하지만

그 중 Private Claim으로 유저 아이디와 같은것을 넣어 주고 받을 것이다.

공개되어도 괜찮고 유저를 구분할 수 있는 것을 넣어줄것이다.!

 

3. Signature

Header, Payload, SecrectKey(서버만 알고 있는 비밀 키)를 

HMAC256(HMAC SHA256)로 암호화합니다.

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

따라서 시크릿 키는 안전하게 보관해야한다...

 

 

이 세가지를 합쳐서 다음과 같이 JWT를 완성할 수 있다.

 

그럼 JWT는 어떻게 사용해야 하는가?

서버에 요청할때 헤더에 Authorization 키 값을 다음과 같이 넣어주어

서버에 요청을 하면 된다.

Authorization: Bearer <token>