エラーメッセージ
IDX10503: Signature validation failed. The token's kid is: '2026-10', but did not match any keys in TokenValidationParameters or Configuration.
別の表記
- IDX10503: Signature validation failed. Token does not have a kid. Keys tried:
- IDX10517: Signature validation failed. The token's kid is missing.
- Bearer error="invalid_token", error_description="The signature key was not found"
全文は「Keys tried: …」、鍵の数、`[PII of type … is hidden]` というプレースホルダーへと続きます(開発環境で `IdentityModelEventSource.ShowPII = true` を設定すると表示されます)。6.36.0、7.7.1、8.23.0 で確認しました。6.x では「IDX10503: Signature validation failed. Token does not have a kid. Keys tried: …」という表記で、7.x と 8.x では上記の表記が使われ、`kid` のないトークンは IDX10517「The token's kid is missing」として報告されます。
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenSignatureKeyNotFoundException
このエラーの意味
トークンは `kid` で署名鍵を指定していますが、`TokenValidationParameters`(`IssuerSigningKey(s)`)にも、Authority の JWKS からダウンロードした構成にも、その鍵 ID を持つ鍵がありません。署名の計算は一度も行われていません。候補となる鍵がなかったためです。ASP.NET Core では、クライアントに `WWW-Authenticate: Bearer error="invalid_token", error_description="The signature key was not found"` が返されます。
発生する理由
発行者が署名鍵をローテーションした
よくある静的に設定された鍵(または一度も更新されていないキャッシュ済みの構成)は、以前の `kid` しか知りません。Entra ID、Auth0、Keycloak、IdentityServer はいずれも鍵をローテーションします。
別のテナントの Authority またはメタデータアドレス
よくあるEntra ID の v1 と v2 のエンドポイントの取り違え、別のテナント ID、個別のメタデータを持つ B2C のポリシー、またはステージング環境の Authority が原因です。ダウンロードした鍵自体は有効ですが、別の誰かのトークンを検証するためのものです。
構成を読み込めなかった
ときどきメタデータのダウンロードに失敗すると、ハンドラーは構成から得た鍵が 0 個の状態で検証を行います(「Number of keys in Configuration: '0'」)。本当のエラー(IDX20803)は別途ログに記録されます。
複数の鍵を使う発行者に対して IssuerSigningKey を 1 つだけ設定している
ときどきJWKS の鍵を 1 つだけハードコードしても、発行者がセット内の別の鍵で署名するまでしか動作しません。
修正方法
- 1.
ハンドラーに Authority から鍵を取得させる
`Authority` を設定すると、`JwtBearer` は OpenID Connect ディスカバリを通じて発行者の JWKS をダウンロードし、定期的に更新するほか、トークンが未知の鍵を指定したときにも更新します(`RefreshOnIssuerKeyNotFound`。デフォルトで有効)。
csharp builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { // Keys come from {Authority}/.well-known/openid-configuration -> jwks_uri and are refreshed automatically. options.Authority = "https://login.example.com/"; options.Audience = "api://orders"; }); - 2.
デバッグ中は非表示の値を表示する
IdentityModel はデフォルトで、例外のテキスト内の鍵 ID とトークンの内容を非表示にします。どの鍵が試されたかを確認するには、開発環境でのみ `ShowPII` を有効にしてください。
csharp // Development only: show the hidden values ([PII of type ... is hidden]) in IDX messages. if (builder.Environment.IsDevelopment()) { Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true; }
関連するエラー
IDX10511: Signature validation failed. Keys tried:Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)IDX20803: Unable to obtain configuration from: 'http://keycloak:8080/realms/mai…Microsoft.IdentityModel.Protocols (.NET)no applicable key found in the JSON Web Key Setjose (JavaScript)Unable to find a signing key that matches '2026-10-rotated'jwks-rsa (Node.js)