Develop Diary/Interview

[Interview] JWT에 대해 설명해주세요.

wakelight23 2025. 2. 7. 21:31

JWT(JSON Web Token)

● 클라이언트와 서버 간 정보를 안전하게 주고받기 위해 사용하는 표준 토큰입니다.

● 사용자의 정보를 JSON 객체로 안전하게 전송하는 간편하며 개방적인 토큰입니다.

● 디지털 서명이 되어 있기 때문에 신뢰성이 보장됩니다.

● HMAC 알고리즘, RSA, ECDSA를 사용한 공개/비밀 키 페어를 사용하여 서명합니다

● JWT에는 두 가지의 유형이 있습니다.

  ○ JWS(JSON Web Signature)

    - 클레임의 내용은 누구나 읽을 수 있지만 서명이 있기 때문에 데이터의 무결성을 보장합니다.

클레임이 무엇인지 설명해주세요.
- iss(issuer), exp(expiration time), sub(subject), aud(audience) 등 사용자에 대한 정보나 토큰에 대한
  속성을 key-value 형태로 저장한 것입니다.

 

  ○ JWE(JSON Web Encryption)

    - 클레임 자체를 암호화하며, 복호화 방법을 알고 있는 사용자만이 Payload를 읽을 수 있습니다.

JWT의 구성은 3가지

● Header, Payload, Signature 이렇게 3가지로 나누어집니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. // 헤더
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. // 페이로드
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c // 서명

  ○ Header는 토큰의 타입과 서명 알고리즘의 정보를 가지고 있습니다.

    - JSON으로 표현된 헤더를 Base64로 인코딩한 것입니다.

 

  ○ Payload는 사용자 정보나 클레임(ex:iss, sub, exp, aud 등)이 키-값(key-value)로 포함된 부분입니다.

    - JWS 방식에서는 Payload도 Base64로 인코딩합니다. 이 부분은 누구나 디코딩이 가능하기 때문에

      JWS Payload에는 민감한 정보를 포함이 되어서는 안됩니다.

    - JWE 방식에서는 Payload를 안전한 알고리즘과 비밀 키로 암호화하기 때문에 민감한 정보를 포함해도
      문제가 없습니다.

 

  ○ Signature는 Header와 Payload를 결합한 후 지정된 알고리즘과
     비밀 키 또는 공개 키로 서명한 값입니다.

  - JWT의 무결성을 보장하며, 데이터가 변경되지 않았음을 확인할 수 있습니다.

  - 인코딩한 Header, Payload를 Header에서 정의한 알고리즘에 의해 비밀 키(secret key)로 암호화합니다.

  - key로만 복호화할 수 있기 때문에 토큰의 전송자와 내용의 무결성을 보장합니다.

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

 

JWT의 장점이라 하면...

● 독립적(Stateless)으로 작동합니다. 필요한 정보를 모두 자체적으로 가지고 있기 때문에 서버에서 세션을
   저장할 필요가 없습니다. 서버는 부하를 줄일 수 있으며 확장성을 확보할 수 있습니다.

 

무결성이 보장됩니다. JWS를 통해 토큰이 변조되지 않았음을 증명할 수 있고, JWE는 Payload를 암호화하기
   때문에 데이터의 기밀성까지 보장할 수 있습니다.

 

● 간결(Compact)하고, URL에서 안전하게 사용 가능합니다. 모바일 기기 및 애플리케이션에서 클라이언트가

   편리하게 파싱하고 이용할 수 있습니다.

 

참고자료

Toss payments 개발자센터