1. Header(헤더): JWT의 헤더는 두 가지 정보를 포함

(토큰의 타입을 포함, 보통 JWT)

  • "alg" (Algorithm): 서명을 생성하는 데 사용된 해싱 알고리즘을 지정합니다. 일반적으로 HMAC SHA256 또는 RSA를 사용
  • "typ" (Type): 토큰의 유형을 나타내며, 보통 "JWT"로 지정

 

2. Payload(내용): JWT의 페이로드는 실제로 전송하려는 정보를 포함합니다. 페이로드는 클레임(claim)이라고도 불리는 키-값 쌍의 집합으로 구성됩니다. 클레임은 세 가지 유형으로 나뉜다.

(사용자나 토큰에 대한 토큰 정보 포함, 예) 사용자 이름, 토큰 만료 시간 등) 

* JWT 토큰은 상태 또는 토큰에 대한 정보를 서버에서 관리 하지 않기 때문에 만료 시간을 꼭 넣어줘야 한다.
(서버가 아닌 클라이언트에서 관리 되는 JWT 의 특성상 유출 될 경우 보안에 문제가 생기기 때문에 만료 시간 지정이 필수 적이다.)
  1. Registered Claims: 표준 클레임으로, 토큰에 대한 정보를 제공합니다. 일반적으로 이메일 주소나 발급자와 같은 정보가 여기에 포함됩니다.
  2. Public Claims: 충돌을 피하기 위해 클레임의 이름을 URI 형식으로 지정합니다. 공개 클레임은 사용자 정의 클레임입니다.
  3. Private Claims: 서비스 내에서 사용하기 위해 정의된 사용자 지정 클레임입니다. 이름이 충돌하지 않도록 URI 형식으로 지정됩니다.

 

3. Signature(서명): 서명은 헤더, 페이로드 및 비밀 키를 사용하여 생성됩니다. 서명을 사용하면 토큰이 변경되지 않았고(무결성 확인) 토큰이 발급된 곳에서만 생성되었는지 확인할 수 있다(인증).

(토큰이 유효한지 확인, 위조 되진 않았는지 ?)

이러한 구조로 JWT는 정보를 안전하게 전달하고 인증 및 권한 부여에 사용. 헤더와 페이로드는 Base64로 인코딩되어 있으며, 서명은 Base64로 인코딩되지만 비밀 키로 암호화되어 있다.

'Java > 개념 정리' 카테고리의 다른 글

스레드의 차단(blocked)  (0) 2024.05.16
var 키워드에 대하여  (0) 2024.02.28
Heap 이란?  (1) 2023.10.22
연결리스트(LinkedList)  (0) 2023.10.21
HashMap 이란?  (0) 2023.10.20

+ Recent posts