본문 바로가기
CS

JWT (JSON Web Token)

by 감자b 2024. 12. 26.

JWT란

JSON 객체를 이용해 당사자 간에 안전하게 정보를 전송하기 위해 만들어진 것으로, 인증에 필요한 정보를 암호화하여 담은 토큰을 의미한다.

 

JWT의 구성 요소

 

Header

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

헤더는 서명 알고리즘의 종류(HMAC SHA256 또는 RSA)와 토큰 유형이 담겨져 있다.

 

Payload

{
  "sub": "1234567890",
  "name": "hyeon",
  "iat": 1516239022
}

클레임(전달하려는 정보)이 담겨져 있는 부분으로 시스템에서 실제로 사용되는 정보에 대한 내용을 의미한다.

이 부분은 수정이 가능하고 노출이 가능하므로 ID와 비밀번호와 같은 개인 정보가 아닌 토큰의 만료 기간이나 발급 시간 등을 담아야 한다.

추가로 Payload에 들어갈 수 있는 클레임의 종류는 3가지로 분류 된다.

  • Registered claims(등록 클레임)
    • 미리 정의가 되어있는 클레임 세트로 다음과 같이 구성되어 있다.
    • iss(발행인)
    • exp(만료 시간 NumericDate 형식)
    • sub(제목)
    • aud(대상자)
    • iat(발급 시간)
    • jti(토큰 식별자)
  • Public claims(공개 클레임)
    • 사용자가 정의할 수 있는 클레임으로 충돌을 방지하기 위하여 URI로 정의되어야 한다.
  • Private claims(비공개 클레임)
    • 클라이언트와 서버 간 정보를 공유하기 위해 생성된 클레임으로 양측 간 협의 하에 임의로 지정된 정보를 저장한다.

signature

토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드를 의미한다.

헤더와 페이로드를 각각 BASE64로 인코딩하고, 이 값을 서버가 가지고 있는 비밀 키를 이용해 헤더에서 정의한 알고리즘(alg)으로 해싱 후 다시 BASE64로 인코딩한다.

 

완성된 JWT 토큰 예시 (https://jwt.io/#debugger-io)


JWT의 인증 과정

JWT 전송 방법

Authorization: Bearer <token>

 

'CS' 카테고리의 다른 글

[네트워크] 사설 IP, 공인 IP  (0) 2024.12.26
시스템 콜(System Call)  (0) 2024.12.26
포트(Port)  (0) 2024.12.26
문자 집합(Character Set)  (1) 2024.12.26
[네트워크] IP, TCP, UDP  (0) 2024.12.26