Fehlermeldung
IDX10511: Signature validation failed. Keys tried:
Auch ausgegeben als
- Bearer error="invalid_token", error_description="The signature is invalid"
Der Rest der Meldung listet die probierten Schlüssel (verborgen als `[PII … is hidden]`, solange `ShowPII` nicht aktiv ist), Schlüsselanzahlen, die Herkunft des gefundenen Schlüssels und den `kid` auf.
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenInvalidSignatureException
Was der Fehler bedeutet
Anders als bei IDX10503 wurde ein Schlüssel mit dem `kid` des Tokens gefunden („Matched key was in 'TokenValidationParameters'“ oder „…'Configuration'“) – und trotzdem schlug die Signaturprüfung mit diesem Schlüssel fehl. Entweder teilen sich zwei verschiedene Schlüssel eine Schlüssel-ID, oder das Token wurde nach dem Signieren verändert. ASP.NET Core antwortet mit `error_description="The signature is invalid"`.
Warum der Fehler auftritt
Zwei Schlüssel mit demselben kid
häufigAls Namen vergebene Schlüssel-IDs (`signing-key`, `default`, `rsa1`) kollidieren, wenn jede Umgebung oder jedes Deployment einen eigenen Schlüssel generiert. Der Validator wählt den Schlüssel anhand von `kid`, und die Signaturprüfung schlägt fehl.
Header oder Payload nach dem Signieren geändert
gelegentlichErneute Kodierung durch ein Gateway, Trimmen oder Testcode, der Claims in einem bestehenden Token bearbeitet.
Unterschiedliche Bytes für dasselbe HMAC-Secret
gelegentlichMit HS256 und einem `kid` baut eine Seite den Schlüssel womöglich aus UTF-8-Text und die andere aus base64-dekodierten Bytes. Die Schlüssel-ID passt, der Schlüssel nicht.
So behebst du den Fehler
- 1.
Thumbprint-basierte Schlüssel-IDs verwenden
Ein aus dem Schlüsselmaterial berechneter `kid` (RFC 7638) kann nur kollidieren, wenn die Schlüssel identisch sind.
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.
Bytes des Secrets einheitlich festlegen
Speichere das Shared Secret base64-kodiert und dekodiere es auf beiden Seiten auf dieselbe Weise.
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);
Verwandte Fehler
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)