Message d’erreur
IDX10511: Signature validation failed. Keys tried:
Également affiché sous la forme
- Bearer error="invalid_token", error_description="The signature is invalid"
Le reste du message liste les clés essayées (masquées sous la forme `[PII … is hidden]` sauf si `ShowPII` est activé), le nombre de clés, la provenance de la clé correspondante et le `kid`.
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenInvalidSignatureException
Ce que cela signifie
Contrairement à IDX10503, une clé portant le `kid` du jeton a été trouvée (« Matched key was in 'TokenValidationParameters' » ou « …'Configuration' »), et la signature ne se vérifie pourtant pas avec elle. Soit deux clés différentes partagent un même identifiant de clé, soit le jeton a été modifié après la signature. ASP.NET Core répond par `error_description="The signature is invalid"`.
Pourquoi cela se produit
Deux clés avec le même kid
fréquenteLes identifiants de clé choisis par nom (`signing-key`, `default`, `rsa1`) entrent en collision lorsque chaque environnement ou chaque déploiement génère sa propre clé. Le validateur choisit la clé d’après le `kid`, et la signature échoue.
En-tête ou charge utile modifiés après la signature
occasionnelleNouvel encodage par une passerelle, rognage (trim), ou code de test qui modifie des claims dans un jeton existant.
Octets différents pour le même secret HMAC
occasionnelleAvec HS256 et un `kid`, un côté peut construire la clé à partir du texte UTF-8 et l’autre à partir des octets obtenus en décodant le base64. L’identifiant de clé correspond ; la clé, non.
Comment corriger l’erreur
- 1.
Utiliser des identifiants de clé fondés sur l’empreinte
Un `kid` calculé à partir du matériel de clé (RFC 7638) ne peut entrer en collision que si les clés sont identiques.
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.
S’accorder sur les octets du secret
Stockez le secret partagé encodé en base64 et décodez-le de la même manière des deux côtés.
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);
Erreurs associées
IDX10503: Signature validation failed. The token's kid is: '2026-10', but did n…Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)Signed JWT rejected: Invalid signatureNimbus JOSE + JWT (Java)failed to verify signature: failed to verify id token signaturecoreos/go-oidc (Go)