본문 바로가기

Dev/etc

JWT Token

JWT는 JSON Web Token의 약자로 전자 서명된 URL-safe(URL)

 

JWT는 API 인증 등에 사용하는 토큰이므로 스펙에 인증하는 방버베 대한 내용은 적혀있지 않고 토큰을 어떻게 만들고 검증하는지에 대해서 나와 있다.

** Auth0에서 만든 JWT사이트가 참고하기 제일 좋음.

 

 

위 그림에서 보이 듯이

왼쪽은 토큰 오른쪽은 디코딩(복호화된)된 값이다.

빨간색 - 헤더

보라색 - 페이로드 JWT Claim Set 이라고도 함

하늘색 - 시그니쳐

 

JOSE 헤더

JWT 토큰을 어떻게 해석해야 하는지를 명시한 부분.

이 헤더르르 열어보고 이어서 설명할 JWT Claim Set이나 Signature를 어떻게 해석할지를 알 수 있음.

JOSE 헤더의 값을 base64로 인ㅋ호딩해서 헤더를 생성함.

 

JWT Claim Set

실제 토큰의 바디로 토큰에 포함할 내용을 넣음.

JWT는 토큰을 디코딩해서 바로 값을 확인할 수 있는 구조로 되어 있어서 DB 조회할 필요없이 사용자 아이디 등을 여기에 담아서 바로 사용할 수 있음.

JOSE 헤더와 같이 base64로 인코딩.

 

Signature

JOSE 헤더와 JWT Claim Set은 암호화를 한 것이 아니라 단순히 JSON 문자열을 base64로 인코딩한 것 뿐.

그래서 누구나 이 값을 다시 디코딩 하면 JSON에 어떤 내용이 들어있는지 확인할 수 있음.

토큰을 사용하는 경우 이 토큰을 다른 사라미 위변조할ㄹ 수 없어야 하므로 JOSE헤더와 JWT Claim Set가 위변조되었는지를 검증하기 위한 부분이 Signature임.

JOSE 헤더와 JWT Claim Set을 마침표(.)로 이어 붙이고 헤더에 저장된 알고리즘 값을 통해 인코딩하면 Signature 생성됨.

 

 

JWT에서 토큰의 정보를 클레임이라고 부르기 때문에 이 정보를 모두 가지고 있는 바디 부분을 Claim Set이라고 함

Claim Set은 키 부분인 Claim Name과 값 부분인 Claim Value의 여러 쌍으로 이루어짐.

Claim Name으로 사용 가능한 값에는 3가지 분류가 있음

이름(Registered), 공개 클레임 이름(Public), 비밀 클레임 이름(Private)

등록된 클레임 이름은 IANA JSON Web Token Claims 등록된 이름이고 필수 값은 아니지만 공통으로 사용하기 위한 기본값이 정해져 있음.

'Dev > etc' 카테고리의 다른 글

Query DSL  (0) 2021.09.27
DDD & TDD  (0) 2021.09.27
OSI 7 Layer  (0) 2021.09.24
LoadBalancer  (0) 2021.09.24
Router  (0) 2021.09.24