사용자가 서버에 접근할 때 이 사용자가 인증된 사용자인지 확인하는 방법
무상태성
사용자 인증정보가 담겨있는 토큰이 서버가 아닌 클라이언트에 저장됨.
서버 입장에서는 인증정보를 저장하거나 유지하지 않아도 되기 때문에 무상태로 효율적인 검증을 할 수 있다.
확장성
결제 서버랑 주문을 위한 서버가 분리되어있다고 했을 때
세션 인증 기반은 각각의 API에서 인증을 해야하는데 반해 토큰 기반 인증에서는 토큰을 가지는 주제가 서버가 아니라 클라이언트기 때문에 하나의 토큰으로 결제서버와 주문 서버에 요청을 보낼 수 있다.
(ex. 구글, 네이버, 카카오 아이디로 로그인 인증하기 등 )
무결성
토큰 방식은 HMAC(hash-based message authentication)기법을 사용한다.
토큰 발급 이후에 토큰 정보를 변경할 수 없음.
무결성이 보장된다.
클라이언트가 서버에 요청을 할 때, 추가로 전송해야하는 정보가 늘어나기 때문에 요청/응답 시 payload가 커지는 단점이 있다.

발급받은 JWT를 이용해 인증을 하려면 HTTP 요청 헤더 중에 Authorization 키 값에 Bearer + JWT 토큰값을 넣어서 보내야한다.
토큰의 타입과 해싱 알고리즘을 지정하는 정보가 담겨있다.
토큰과 관련된 정보를 기입한다.
한 덩어리를 클레임이라고 부르고 key-value형태의 한 쌍으로 이루어져있다.
클레임은 공개 클레임, 비공개 클레임으로 나눌 수 있다.
iss: 토큰 발급자
iat: 발급된 시간
exp: 만료 시간
aud: 토큰 대상자
sub: 토큰 제목
:해당 토큰이 조작, 변경되지 않았음을 확인하는 용도이다.
헤더의 인코딩 값 + 내용의 인코딩 값을 합친 후에 주어진 비밀키로 해시값을 생성한다.

토큰이 탈취되더라도 피해를 줄이기 위해 토큰의 사용기간 자체를 줄이는 방법을 택한다.
Access Token 유효기간은 짧게 설정
Refresh Token 유효기간은 길게 설정
사용자는 둘 다 서버에 전송하고 Access Token로 인증하고 만료되었을 때는 Refresh Token으로 다시 Access Token을 받는다.
공격자는 Access Token을 탈취하더라도 짧은 유효기간이 지나고 나면 사용할 수 없다.
출처: https://inpa.tistory.com/entry/WEB-📚-JWTjson-web-token-란-💯-정리 [Inpa Dev 👨💻:티스토리]