1 minute read

1. JWT (JSON Web Token)

JWT는 인증 및 데이터 교환을 위해 JSON 객체를 안전하게 전송하는 데 사용됩니다. 세 가지 부분으로 구성됩니다: Header, Payload, Signature.

예시 (JWT)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

구조:

  1. Header (Base64Url 인코딩):

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

    Base64Url 인코딩: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

  2. Payload (Base64Url 인코딩):

     {
       "sub": "1234567890",
       "name": "John Doe",
       "iat": 1516239022
     }
    

    Base64Url 인코딩: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

  3. Signature:

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

    결과: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


2. JWS (JSON Web Signature)

JWS는 데이터에 서명을 추가하여 무결성을 보장합니다. JWT도 서명을 포함할 경우 JWS 형식의 데이터입니다.

예시 (JWS)

eyJhbGciOiJIUzI1NiJ9.eyJleGFtcGxlIjoidGVzdCJ9.G1X8LqHxAsoLVK4T_XfUd2LR8PjyF4bXAdTwU4ZnhzE

구조:

  1. Header (Base64Url 인코딩):

     {
       "alg": "HS256"
     }
    

    Base64Url 인코딩: eyJhbGciOiJIUzI1NiJ9

  2. Payload (Base64Url 인코딩):

     {
       "example": "test"
     }
    

    Base64Url 인코딩: eyJleGFtcGxlIjoidGVzdCJ9

  3. Signature:

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

    결과: G1X8LqHxAsoLVK4T_XfUd2LR8PjyF4bXAdTwU4ZnhzE


3. JWE (JSON Web Encryption)

JWE는 JSON 데이터를 암호화합니다. 암호화된 데이터는 Header, Encrypted Key, Initialization Vector, Ciphertext, Authentication Tag로 구성됩니다.

예시 (JWE)

eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.
QmFzZTY0RW5jcnlwdGVkS2V5.
QmFzZTY0SXY.
QmFzZTY0Q2lwaGVydGV4dA.
QmFzZTY0QXV0aFRhZw

구조:

  1. Header:

     {
       "alg": "RSA1_5",
       "enc": "A128CBC-HS256"
     }
    

    Base64Url 인코딩: eyJhbGciOiJSU0ExXzUiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0

  2. Encrypted Key: Base64-encoded Encrypted Key

  3. Initialization Vector (IV): Base64-encoded IV

  4. Ciphertext: Base64-encoded Ciphertext

  5. Authentication Tag: Base64-encoded Tag


4. JWK (JSON Web Key)

JWK는 공개 키 또는 비밀 키를 JSON 형식으로 표현합니다.

예시 (JWK)

{
  "kty": "RSA",
  "e": "AQAB",
  "n": "0vx7agoebGc...0yzQ",
  "alg": "RS256",
  "kid": "2011-04-29"
}

구조:

  • kty: 키 유형 (예: RSA, EC, oct 등)
  • e: 공개 키의 지수 (Base64Url 인코딩)
  • n: 공개 키의 모듈러스 (Base64Url 인코딩)
  • alg: 알고리즘 (예: RS256, HS256 등)
  • kid: 키 식별자 (Key ID)

간단 요약

형식 설명
JWT 서명 또는 암호화된 데이터 전송에 사용되는 표준.
JWS JSON 데이터를 서명하여 무결성을 보장.
JWE JSON 데이터를 암호화하여 기밀성을 보장.
JWK 공개/비밀 키를 JSON 형식으로 표현.

필요에 따라 각 형식을 사용하여 인증, 데이터 보호, 키 관리 등을 구현할 수 있습니다.


라고 한다.

Updated: