JWT 는 JSON Web Token의 약자로 유저를 인증하고 식별하기 위한 토큰 기반 인증이다. JWT토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 떄문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜어 줄 수 있다.
토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함 되며 데이터가 많아지면 토큰이 커질 수 있으며 토큰이 한번 발급된 이후 사용자의 정보를 바꾸더라도 토큰을 재발급하지 않는 이상 반영되지 않는다.
JWT는 .으로 구분되며 Header, Payload, Signature의 3가지 문자열로 되어있다.
Header는 토큰의 타입과 해싱 알고리즘이라는 두가지 정보를 담고 있다.
{"alg":"HS256","typ":"JWT"}
보통 해싱 알고리즘은 HS256
을 사용하지만 HS512
을 이용해 토큰을 더 길게 만들수 있다.
Payload에는 토큰에 담을 정보가 들어가며, 담는 정보의 한 조각은 name/value의 한 쌍으로 이루어진 Claim이라고 부릅니다. Claim은 Registered, Public, Private의 세 분류로 나뉘어져 있으며 Registered Claim은 토큰 발급자, 토큰 제목, 토큰 만료시간, 토큰 발급시간 등 토큰에 대한 정보를 담기 위해 이미 이름이 정해진 Claim 입니다.
JWT의 마지막 부분은 서명으로, Header의 인코딩값과 Payload의 인코딩값을 합친 후 주어진 비밀키로 해싱하여 생성합니다