본문으로 건너뛰기

JWKS 서명 검증

JWKS Verifier

JWKS 주소에서 키를 가져와 kid로 고른 뒤 토큰 서명과 표준 클레임을 검증합니다.

발급자가 공개한 JWKS로 토큰을 검증합니다. URL로 가져오거나 붙여넣으면 됩니다. `kid`로 키를 고르고 서명을 확인한 뒤 `exp`와 `nbf`를 검사하고, 적어 두면 `iss`와 `aud`까지 검사합니다. 토큰은 보내지 않습니다. 가져오는 것은 JWKS URL뿐입니다.

🔒 브라우저 안에서만 처리jwtjwksauthverify

토큰은 이 탭을 떠나지 않습니다.

서명 검증은 브라우저의 WebCrypto가 하고, 이 페이지에는 서버 쪽이 없습니다. 유일한 네트워크 요청은 입력한 JWKS URL로의 GET 하나이며 그 요청에는 URL 외에 아무것도 — 토큰도 — 실리지 않습니다.

토큰

Bearer 접두사는 알아서 뗍니다.

공개키 (JWKS)

키 출처

브라우저가 직접 GET 합니다. 토큰은 보내지 않습니다.

발급자의 /.well-known/openid-configuration 안 jwks_uri가 이 주소입니다.

기대하는 값 (선택)

시계 오차 허용

비워 두면 그 클레임은 검사하지 않습니다. exp·nbf는 항상 검사합니다.

검증하는 것

  • · RS256·RS384·RS512, PS256·PS384·PS512, ES256·ES384·ES512, EdDSA(Ed25519)를 WebCrypto로 검증합니다 (RFC 7518 §3, RFC 8037). HS*는 공유 비밀키라 JWKS로는 검증할 수 없고 JWT 디코더에서 비밀키로 검사합니다. ES256K와 Ed448은 브라우저 WebCrypto에 없습니다.
  • · 키는 토큰 헤더의 kid로 고릅니다 (RFC 7515 §4.1.4). 키 회전 중이면 JWKS에 키가 여럿이므로, kid가 맞지 않으면 그렇게 말해 줍니다.
  • · exp·nbf는 허용 오차를 두고 검사하고, iss·aud는 기대값을 적었을 때만 검사합니다 (RFC 7519 §4.1). alg: none은 무조건 거부합니다.

사용 방법

  1. 토큰을 붙여넣습니다

    `alg`와 `kid`, 발급자를 바로 읽어 보여 줍니다. 어느 JWKS가 필요한지 그것으로 알 수 있습니다.

  2. 키 집합을 가져오거나 붙여넣습니다

    발급자의 `/.well-known/openid-configuration`에 `jwks_uri`가 적혀 있습니다. Google·Microsoft·Apple은 버튼으로 있고, 나머지는 직접 입력하거나 붙여넣으면 됩니다.

  3. 기대하는 값을 채웁니다

    `iss`와 `aud`를 비워 두면 아예 검사하지 않습니다. 실제 시스템에서 다른 대상용 토큰이 통과하는 경로가 그것입니다. 시계 오차 허용은 서버 사이에 1분쯤 차이가 나는 경우를 위한 것입니다.

  4. 판정과 클레임 표를 읽습니다

    위쪽 배너가 받아들일지 말지를 말하고, 아래 표가 어느 검사에서 그 답이 나왔는지와 어떤 키가 선택됐는지를 말합니다.

자주 묻는 질문

CORS 오류로 가져오지 못했습니다.

JWKS 엔드포인트가 CORS 헤더를 보내야 브라우저가 읽을 수 있습니다. Google·Microsoft·Apple은 보내고, 직접 운영하는 발급자 중에는 안 보내는 곳이 많습니다. curl로 받아서 JSON을 붙여넣으세요. 어느 쪽이든 검증은 똑같습니다.

kid에 맞는 키가 없다고 나옵니다.

대개 키 회전 때문입니다. 발급자가 키를 바꾸기 전에 서명된 토큰인데 JWKS에는 새 키만 남아 있는 경우죠. 가져온 JWKS와 다른 발급자의 토큰일 수도 있습니다.

`alg: none`은 왜 항상 거절되나요?

그것을 받아들이는 것이 JWT의 고전적인 취약점이기 때문입니다. 공격자가 헤더를 고쳐 서명을 없애면, 헤더를 믿는 라이브러리가 그 토큰을 통과시킵니다. 검증 경로에서 그것이 정당하게 쓰일 자리는 없습니다.

HS256 토큰도 확인되나요?

여기서는 안 됩니다. HS*는 공유 비밀이고 JWKS는 공개키를 공개하는 것입니다. 비밀을 받는 JWT 디코더를 쓰세요. HMAC 키를 JWKS에 올리는 발급자는 토큰을 발행할 능력을 공개하는 셈입니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.