RFC 7519 웹 표준으로 지정이 되어있으며 Json 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token이다.
클라이언트와 서버, 서비스와 서비스 사이 통신 시 권한 인가를 위해 사용하는 토큰이다.
URL에대해 안전한 문자열로 구성되어 있기 때문에 HTTP 어디든 위치할 수 있다.
JWE or JWS 를 뜻한다
JWT의 장점
중앙의 인증서버, 데이터 스토어에 대한 의존성이 없다.
시스템 수평 확장에 유리하다
Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용이 가능하다.
JWT의 단점
Payload의 정보가 많아지면 네트워크 사용량 증가, 데이터 설계 고려가 필요하다.
토큰이 클라이언트에 저장, 서버에서 클라이언트의 토큰을 조작할 수 없다.
JWS (Json Web Signature)
서버에서 인증을 근거로 인증정보를 서버의 private key로 서명 한것을 토큰화 한것
JWT의 구조는 header(json) + payload(json) + signature 로 이루어져 있다.
헤더에는 어떻게 검증하는지 시그니처를 해싱하기 위한 알고리즘 정보들이 담겨져 있다.
페이로드는 JWT에 대한 내용 즉 서버와 클라이언트가 주고받기로 한 값들로 구성되어 있다.
시그니쳐는 토큰의 유효성을 검증하기 위한 문자열로 구성되더 있다.
JWS는 클라이언트가 로그인을 시도할 경우 > 서버에서 payload에 담고 싶은 내용을 담아(로그인 한 사람의 정보, 접근권한) 서명하고 Token을 발행해준다. 그렇게 된다면 클라이언트는 다음 통신에서 토큰값 함께 전달하고 서버에서는 Token을 수신하여 검증 후 절차 로직을 실행한다.
JWE (Json Web Encryption)
서버와 클라이언트 간 암호화된 데이터를 토큰화 한 것
JWK (Json Web Key)
JWE 에서 payload encryption에 쓰인 키를 토큰화 한 것
JWT구조
HEADER : 시그니처를 해싱하기 위한 알고리즘 정보가 담겨져 있는 부분
PAYLOAD : claim을 담고있는 부분이다.
Claim : 사용자에 대한 프로퍼티를 담고있는 정보로 3가지 타입이 존재한다.
Reserved Claims : 정보 교환에 유용하도록 미리 정의되어 있는 클레임 이 클레임은 필수적이지 않고 Optional이다.
Public Claims : 충돌이 방지된 네임스페이스를 담고있는 URI와 같이 이름이 충돌되지 않도록 해야함
Private Claims : 서버와 클라이언트가 정보를 공유하기 위해 사용하기로한 클레임 정보
SIGNATURE : 서명은 토큰이 변조되지 않았음을 증명하는 무결성을 위해 사용된다. 시그니쳐는 인코딩된 헤더, 페이로드, 비밀키, 헤더에 정의된 서명 알고리즘을 이용하여 생성한다.