JWT에 대해 이야기하기 전에 쿠키와 세션에 대해 잠시 살펴보겠습니다!
세션은 쿠키의 보안 문제를 보완합니다!
하지만, 세션은 상태 비저장 HTTP를 위반합니다.하다.
이는 세션 ID 또는 상태가 서버의 캐니스터에 저장되기 때문입니다.
시민인증을 사용하면 상대적으로 서버의 부하가 크기 때문에 확장성이 떨어집니다.
또 다른 단점은 요청이 있을 때마다 캐니스터에서 세션 ID를 조회하여 DB 액세스라는 논리가 다시 실행된다는 것입니다.
이를 위해 JWT가 등장했습니다!
JSON 웹 토큰(JWT)
인증에 필요한 정보를 토큰으로 암호화하여 사용하는 토큰
인터넷 상에서 정보의 안전한 전송을 위한 개방형 표준으로 JSON 형태의 데이터를 사용합니다.
클라이언트와 서버 간의 인증에 사용됩니다.
JWT는 세 가지 주요 부분으로 구성됩니다.
이들은 헤더, 페이로드 및 서명입니다. 각 부분은 Base64로 인코딩된 문자열이며 각 부분은 마침표(.)로 구분됩니다.
xxxxxx. yyyyy. zzzzzz
서명된 토큰
기본 인증의 구조는 쿠키와 크게 다르지 않지만 서명된 토큰 그건.
공개/개인 키 쌍을 사용하여 토큰에 서명하면 개인 키를 보유한 서버는 서명된 토큰이 적법한 토큰인지 확인하기 위해 서명된 토큰을 인증할 수 있습니다. (비대칭키 및 대칭키 관련 내용)
1. 헤더

헤더는 JSON 형식입니다.
암호화된 콘텐츠(JWT)의 유형과 사용된 알고리즘을 지정합니다.
위의 예에서 토큰의 종류는 JWT이고 개인키로 HS256 알고리즘을 적용하여 토큰을 암호화한 것을 알 수 있다.
2. 페이로드

페이로드는 JSON 형식이며 키-값 형식의 사용자 정보와 같은 클레임 정보를 포함합니다.
클레임 값이 지정되지 않았습니다.
청구 정보는 등록, 공개 및 비공개의 세 가지 유형으로 나뉩니다.
- 등록된 청구 :
- 토큰의 정보를 지정하기 위해 이미 설정된 프레임입니다.
- ex) 토큰 발행사, 유효기간, 발행시간 등
- 공공의 :
- 충돌 방지 이름이 있습니다.
- 클라이언트와 서버는 사용량에 대해 서로 협상할 수 있습니다.
- 사적인 :
- 클라이언트와 서버 간의 계약에 사용되는 클레임
- 이를 통해 서버와 클라이언트는 추가 정보를 보내고 받을 수 있습니다.
헤더와 페이로드 모두 json으로 디코딩되지만 특별한 암호화는 적용되지 않습니다.
따라서 민감한 정보가 포함되어 있지 않습니다.
3. 서명
암호화된 문자열, 토큰이 유효함을 나타내는 정보헤더, 페이로드, 서버에서 제공하는 개인키를 조합하여 생성합니다.이를 통해 JWT의 유효성을 확인하여 사용자가 변조할 수 없도록 합니다.

