카테고리 없음

6월 28일 JWT 토큰이란?

khw7876 2022. 6. 28. 08:18

1로그인을하는 방법에는 2가지가 있다.

1. 세션 인증 기반

2. 토큰 인증 기반 ( 오늘은 이거를 알아보도록 하자! )

JWT 토큰은 3개의 데이터를 담아놓은 토큰이다. 각 데이터는 (.)으로 구분이 되어있다!!

XVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT_HEADER

JWT를 검증하는데 필요한 정보를 가진 데이터입니다.
VERIFY_SIGNATURE 에 사용한 암호화 알고리즘과 토큰 타입, key 의 id 등의 정보를 가지고 있습니다.
온점으로 구분되는 3개의 데이터중 가장 첫번째에 해당한다.

JWT_PAYLOAD

payload에서 중요하게 살펴보아야 할 정보는 토큰 발행시간(iat)와 토큰 만료시간(exp) 입니다. 토큰의 만료 시간이 지나면 새로운 토큰을 발급받아야 합니다.
PAYLOAD 정보

{
"token_type": "access", # 토큰의 종류. 여기서는 access 토큰입니다.
"exp": 1656293275, # 토큰의 만료시간입니다. (Numeric Date)
"iat": 1656293095, # 토큰의 발행시간입니다. (Numeric Date)
"jti": "2b45ec59cb1e4da591f9f647cbb9f6a3", # json token id 입니다.
"user_id": 1 # 실제 사용자의 id값이 들어있습니다.
}

JWT_VERIFY SIGNATURE

headerpayload 는 암호화 되지 않고 단순히 Json → UTF-8 → Base64 형식으로 변환된 데이터 입니다. 즉 headerpayload 의 생성 자체는 너무 쉽고 누구나 만들 수 있는 데이터이죠.

따라서 저 두개의 데이터만 있다면 토큰에 대한 진위여부 판단은 이루어질수 없게 됩니다. 그래서 JWT의 구조에서 가장 마지막에 있는 VERIFY SIGNATURE 는 토큰 자체의 진위여부를 판단하는 용도로 사용합니다.

VERIFY SIGNATUREBase64UrlEncodingheaderpayload 의 정보를 합친 뒤 SECRET_KEY 를 이용하여 Hash 를 생성하여 암호화 합니다.

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