JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON이며 기준은 RFC7519 표준을 따른다. (전자 서명은 JSON 의 변조를 체크 할 수 있게되어 있다.) 이러한 JWT는 서버와 클라이언트 간 정보를 주고 받을 때 HTTP 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증하게되며 또한 HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있다.
- 특징 : Session 과 달리 서버에 따로 저장하지 않고 토큰 자체에 정보를 담는다.
HMAC : 원본 메시지가 변하면 그 해시값도 변하는 해싱(Hashing)의 특징을 활용하여 메시지의 변조 여부를 확인(인증) 하여 무결성과 기밀성을 제공하는 기술입니다.
RSA : RSA는 공개키 암호 알고리즘 중의 하나이며, 세계적으로 사실상의 표준이다.
- Header : 토큰의 타입과 해시 암호화 알고리즘으로 구성
- Payload : 토큰에 담을 클레임(claim) 정보를 포함
- Signature : secret key를 포함
장점
- URL 파라미터와 헤더로 사용
- 수평 스케일이 용이
- 디버깅 및 관리가 용이
- 트래픽 대한 부담이 낮음
- REST 서비스로 제공 가능
- 내장된 만료
- 독립적인 JWT
단점- 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없다.
- 더 많은 필드가 추가되면 토큰이 커질 수 있다.
- 비상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있다.