本文へスキップ

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/384/512、PS256/384/512、ES256/384/512、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のデコーダーを使ってください。JWKSにHMACの鍵を載せる発行者は、トークンを発行する能力そのものを公開していることになります。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。