[용어 정리]
- JWS (JSON Web Signature) : 서버에서 인증을 증거로 인증 정보를 서버의 private key 로 서명한 것을 Token 화 한것.
- JWE (JSON Web Encryption) : 서버와 클라이언트 간 암호화된 데이터를 Token 화 한것.
- JWK (JSON Web Key) : JWE 에서 payload encryption 에 쓰인 키를 Token 화 한것.
- JWT (JSON Web Token) : JWS or JWE
[실제 예제]
JWS 구조 : header(JSON) + payload(JSON) + signature
* signature = sign(header+payload)
JWS header:
{
"alg": "HS256",
"typ": "JWT"
}
JWS payload:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
JWT:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Base64(header) = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Base64(payload) = eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
Base64(signature) = TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
* sign key = Token 생성자의 private key (주로 인증 서버)
[JWS 인증 매커니즘]
1. 클라이언트 A 가 로그인
2. 서버에서는 payload 에 넣고 싶은 내용을 담은 후 (로그인한 사람의 정보, 접근 권한 등) 서명하고 Token 발행
3. 클라이언트는 다음 통신에서 Token을 함께 전달
4. 서버에서는 Token 수신후 서명 검증
5. 이후 정상 절차 수행