네이버 클라우드 캠프

JWT

99duuk 2024. 6. 1. 15:19
  • 헤더 (Header): JWT의 메타데이터를 포함하며, 토큰의 타입과 사용할 서명 알고리즘을 지정합니다.
  • 페이로드 (Payload): 실제 정보를 담고 있는 부분으로, 다양한 클레임(claims)을 포함합니다. 클레임은 토큰의 주체, 만료 시간, 사용자 정보 등 다양한 데이터를 담고 있습니다.
  • 서명 (Signature): 토큰의 무결성을 검증하기 위한 서명입니다. 헤더와 페이로드를 인코딩한 후, 비밀 키를 사용하여 서명합니다. 이 서명을 통해 토큰이 변조되지 않았음을 확인할 수 있습니다.
  •  

비유로 설명

JWT를 등기 우편에 비유해보겠습니다.

  1. 헤더 (Header):
    • 역할: 등기 우편 봉투의 외부에 적힌 정보.
    • 비유: 등기 우편 봉투에는 발송자와 수신자의 정보, 그리고 우편 종류가 적혀 있습니다. JWT의 헤더는 토큰의 메타데이터를 담고 있으며, 우편 봉투의 외부에 해당합니다. 예를 들어, 우편이 "등기"인지 "보통 우편"인지, 어떤 발송 서비스가 사용되었는지를 나타냅니다.
    • JWT 헤더: {"alg": "HS256", "typ": "JWT"}
  2. 페이로드 (Payload):
    • 역할: 등기 우편 봉투 안에 들어 있는 실제 내용물.
    • 비유: 등기 우편의 내용물에는 편지, 계약서, 송장 등이 포함될 수 있습니다. JWT의 페이로드는 토큰의 실제 데이터를 포함하며, 이는 등기 우편 봉투 안에 들어 있는 정보에 해당합니다. 여기에는 클레임(사용자 정보, 토큰 만료 시간 등)이 포함됩니다.
    • JWT 페이로드: {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
  3. 서명 (Signature):
    • 역할: 등기 우편 봉투의 봉인.
    • 비유: 등기 우편 봉투는 누군가 중간에 열어보지 않았다는 것을 보장하기 위해 봉인됩니다. JWT의 서명은 헤더와 페이로드의 무결성을 검증하기 위한 것으로, 봉투가 중간에 열리지 않았다는 것을 확인하는 역할을 합니다. 서명은 발송자가 비밀 키를 사용하여 생성하며, 이를 통해 수신자는 토큰이 변조되지 않았음을 확인할 수 있습니다.
    • JWT 서명: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

종합 예시

  • 헤더 (Header): eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    • Base64Url 인코딩된 헤더
    • {"alg": "HS256", "typ": "JWT"}
  • 페이로드 (Payload): eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
    • Base64Url 인코딩된 페이로드
    • {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
  • 서명 (Signature): SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    • HMAC SHA256 알고리즘으로 생성된 서명

 

결론

  • 헤더는 JWT의 메타데이터로, 등기 우편 봉투의 외부 정보와 같습니다.
  • 페이로드는 JWT의 실제 정보로, 등기 우편 봉투 안의 내용물과 같습니다.
  • 서명은 JWT의 무결성을 보장하는 검증 수단으로, 등기 우편 봉투의 봉인과 같습니다.

'네이버 클라우드 캠프' 카테고리의 다른 글

시큐리티_UserDetailServiceImpl  (0) 2024.06.03
Spring Data REST  (0) 2024.06.03
claim  (0) 2024.06.01
React_{children}, import vs const-require  (0) 2024.05.31
@ElementCollection_임베디드 테이블  (0) 2024.05.31