本文へスキップ
ecdsa.com
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET).NET

エラーメッセージ

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"` が返されます。

発生する理由

修正方法

  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. 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;
    }

関連するエラー

署名エラーデータベースをすべて見る