* https://jwt.io/introduction/ 에 설명된 내용 번역 및 정리
1. JWT 개요
- 서버-클라이언트 또는 서버간 안전한 데이터 통신을 위해 Json Object를 사용하여 간결하게 표준화된 정의(RFC 7519)
- HMAC 알고리즘 또는 RSA 알고리즘을 이용한 토큰 서명 및 인증 방식임
- URL의 POST 파라미터 또는 HTTP 헤더를 통해 작은 데이터를 빠르게 주고 받음
- 데이터베이스 쿼리 또는 세션 처리를 사용하지 않고, 사용자에 대한 모든 필수 정보를 탑재할 수 있음
2. 언제 JWT를 사용해야 하는가?
- 인증 : Sing Sign On 기능을 이용해서 서비스나 리소스에 접근할 때 사용함 (적은 오버헤드와 서로 다른 도메인간 인증을 쉽게 처리 가능)
- 정보 교환 : 정보를 요구하거나 보내는 주체가 누구인지 확인이 가능. 또한 헤더나 페이로드를 이용해서 인증서를 계산함으로써 받은 콘텐츠가 변경되지 않았는지 체크 가능함(무결성)
3. JWT 구조 설명
- 헤더 : 헤더는 기본적으로 알고리즘과 타입 형태로 구분되면 Base64Url로 인코딩됨
- 페이로드 : 유저와 메타정보 항목에 관해 선언된 요구(Claim), registered, public, private 세가지 항목이 있으며 Base64Url로 인코딩함
~ Registered claims : issuer, expiration time, subject, audience 등
~ Publci claims : 자유롭게 정의 가능, 충돌 방지 네임스페이스가 포함된 URI로 정의
~ Private claims : 공개가 아닌 당사자간 정보를 공유하기 위해 만들어진 사용자 정의 클레임
- 인증서 : HMAC SHA256 algorithm 알고리즘으로 인증서를 만드는 경우
~ HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
4. JWT 동작 방식
1) 클라이언트가 서버에게 POST를 이용해 자격증명 데이터(ID/PW)를 서버에 보냄
2) 서버는 JWT를 생성함
3) 클라이언트에게 JWT를 제공
4) Authorization Header에 JWT를 보냄 (Authorization: Bearer <token>)
5) JWT 인증서를 체크 후 정보를 추출한 후 사용자에게 정보를 리턴함
6) 클라이언트에게 응답을 보냄
5. JWT 장점
- XML보다 적은 문자 사용, HTML과 HTTP 환경에서 간결하게 통신 가능함
- 다양한 암호화 알고리즘 사용 가능