JWT란 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim기반의 Web Token이다.
토큰의 헤더는 typ와 alg 두 가지 정보로 구성된다.
typ: 토큰의 타입을 지정 ex) JWT
alg: 알고리즘 방식을 지정하며, 서명 및 토큰 검증에 사용한다. ex)SHA256 or RSA
페이로드에는 토큰에서 사용될 정보의 조각들인 클레임이 담겨 있다.
클레임은 총 세 가지로 나누어진다.
토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터
ex) iss: 토큰 발급자, sub: 토큰 제목
사용자 정의 클레임으로, 공개용 정보를 위해 사용된다. 충돌 방지를 위해 URI 포맷을 이용한다.
ex)
https://poagg42.velog.io" : true
사용자 정의 클레임으로, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장한다.
ex)
"token_type": access
서명은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드
생성된 토큰은 HTTP 통신을 할 때 Authorization이라는 key의 value로 사용된다.
Bearer는 의미가 없는 약속된 값
Self-contatined : 토큰 자체에 정보를 담고 있어서 위험하다
토큰 길이 : 정보의 양이 많아질 수록 토큰의 길이가 길어진다.
Payload 인코딩: 페이로드 자체는 암호화 된 것이 아니라 , BASE64Url로 인코딩 된 것이다. 주요 데이터를 넣지 않도록 조심하자.
Stateless: JWT는 상태를 저장하지 않기 때문에 한 번 만들어지면 제어가 불가능. 즉, 토큰을 임의로 삭제하는 것이 불가능하므로 토큰 만료 시간을 넣어주어야 한다.
Store Token: 토큰은 클라이언트 측에서 관리해야 하기 때문에, 토큰을 저장해야 한다.