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

エラーメッセージ

IDX10511: Signature validation failed. Keys tried:

別の表記

  • Bearer error="invalid_token", error_description="The signature is invalid"

メッセージの残りの部分には、試された鍵(`ShowPII` が有効でない限り `[PII … is hidden]` として非表示)、鍵の数、一致した鍵の取得元、`kid` が列挙されます。

Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenInvalidSignatureException

このエラーの意味

IDX10503 とは異なり、トークンの `kid` を持つ鍵は見つかりました(「Matched key was in 'TokenValidationParameters'」または「…'Configuration'」)。それでも、その鍵では署名を検証できませんでした。2 つの異なる鍵が 1 つの鍵 ID を共有しているか、署名後にトークンが変更されたかのどちらかです。ASP.NET Core は `error_description="The signature is invalid"` で応答します。

発生する理由

修正方法

  1. 1.

    サムプリントに基づく鍵 ID を使う

    鍵の内容から計算した `kid`(RFC 7638)が衝突するのは、鍵が同一の場合だけです。

    csharp
    // Derive kid from the key itself (RFC 7638 thumbprint) so different keys never share an ID.
    var jwk = JsonWebKeyConverter.ConvertFromECDsaSecurityKey(new ECDsaSecurityKey(ecdsa));
    var key = new ECDsaSecurityKey(ecdsa) { KeyId = Base64UrlEncoder.Encode(jwk.ComputeJwkThumbprint()) };
  2. 2.

    シークレットのバイト列を両側でそろえる

    共有シークレットを base64 エンコードして保存し、両側で同じ方法でデコードしてください。

    csharp
    // HS256: issuer and API must build the key from the same bytes.
    var secret = Convert.FromBase64String(builder.Configuration["Jwt:SecretBase64"]!); // >= 32 bytes
    var signingKey = new SymmetricSecurityKey(secret);

関連するエラー

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