- 당사자간에 정보를 JSON 객체로 안전하게 전송하기위한 컴팩트하고 독립적인 방식을 정의 하는 개방형 표준 (RFC 7519)
- 공개/ 개인 키 쌍을 사용하여 서명할 수 있음
- Spring security + JWT
Signature
HS256
- Client 가 서버에 JWT 요청
- 서버가 JWT를 HS256 암호화된 서명을 가지고 만들어서 전달 header, payload, secret key 를 HMAC SHA256으로 암호화
- Client 가 JWT를 해더에 넣고 서버에 요청을 보내면 signature 가 서버 자신이 가지고 있는 secret key (+ header, payload)를 HS256으로 암호화 했을 때 동일한지 확인해서 검증후 인증해줌
RSA
서버 공개키, 개인키
- Client 가 서버에 JWT 요청
- 서버가 JWT를 RSA 암호화된 서명을 가지고 만들어서 전달 header, payload를 개인키로 잠가 signature
- Client 가 JWT를 해더에 넣고 서버에 요청을 보내면 서버는 자신의 공개키로 서명검증해 인증해줌
RSA 배경
- 열쇠 전달 문제
- 인증 문제
RSA 내용
public key (공개키): 퍼블릭 사이트에 공개함 private key (개인키): 자신만 가지고 있음 (자신에게 전달된 암호화된 문서를 해독)/ 인증 문제 해결
1 A, B 가 암호화 문서를 교환할 때,
A → B : A는 B에게 전달할 문서를 B의 공개키로 암호화해서 전달, B는 B의 개인키로 해독
B → A : B는 A에게 전달할 문서를 A의 공개키로 암호화해서 전달, A는 A의 개인키로 해독
2 A, B 전자 서명 확인,
A → B : A는 A의 개인키로 암호화한 문서를 전달, B는 A의 공개키로 해독, A 로 부터 온 문서 확인
B → A : B는 B의 개인키로 암호화한 문서를 전달, A는 B의 공개키로 해독, B 로 부터 온 문서 확인
2 번으로 인증 해결, 1 번으로 해독 (프로토콜이 생김)
A → B : A는 B에게 전달할 문서를 B의 공개키로 암호화 + A의 개인키로 암호화한 문서를 전달, B는 A의 공개키로 A 로 부터 온 문서 확인(인증), B의 개인키로 문서 해독