Tokenvalidierung nicht erfolgreich, weil Tokenansprüche nicht mit der Deployment-Policy übereinstimmen
Erfahren Sie, wie Sie Unstimmigkeiten bei Tokenvalidierungsansprüchen beim Aufruf von APIs beheben, nachdem API-Gateways und API-Deployments erfolgreich mit dem API Gateway-Service erstellt wurden.
Wenn API Gateway eine Anforderung während der Tokenvalidierung ablehnt, stimmen die Tokenansprüche möglicherweise nicht mit der Authentifizierungs-Policy für das Deployment überein. Das Token kann vorhanden und gut formatiert sein. Die Validierung verläuft jedoch immer noch nicht erfolgreich, wenn der Aussteller, die Zielgruppe, die Ablaufzeit oder die erforderlichen benutzerdefinierten Ansprüche nicht mit der Routing-Policy übereinstimmen.
Problemsymptome
Möglicherweise sehen Sie eines oder mehrere der folgenden Symptome:
- Die Anforderung wird während der Authentifizierung abgelehnt, obwohl die Anforderung ein Token enthält, das ordnungsgemäß formatiert ist.
- Die Token-Payload wird gültig angezeigt, nachdem Sie sie dekodiert haben. API Gateway lehnt die Anforderung jedoch weiterhin ab.
- Die Authentifizierung ist mit Claimvalidierungsfehlern für den Wert
aud,iss,expoder den erforderlichen benutzerdefinierten Claim nicht erfolgreich. - Die gleiche Anwendung ist mit einem Token erfolgreich und verläuft mit einem anderen Token von einem anderen Aussteller, einer anderen Zielgruppe oder einer anderen Umgebung nicht erfolgreich.
Mögliche Gründe
Dieses Problem kann eine oder mehrere der folgenden Ursachen haben:
- Der
aud-Anspruch des Tokens stimmt nicht mit der Zielgruppe überein, die für das Deployment konfiguriert ist. - Der
iss-Claim des Tokens stimmt nicht mit dem konfigurierten Aussteller überein. - Die Authentifizierungs-Policy erfordert einen benutzerdefinierten Claim, der im Token fehlt.
- Die Authentifizierungs-Policy erfordert einen benutzerdefinierten Claimwert, der nicht mit dem Token übereinstimmt.
- Das Token ist abgelaufen, oder die Tokenzeitwerte liegen außerhalb des konfigurierten Zeitrahmens.
- Bei einer Discovery- oder Introspektions-basierten Validierung erfüllt das zurückgegebene Claimset die Deployment-Policy nicht.
Authentifizierungs-Policy prüfen
Prüfen Sie die Authentifizierungs-Policy für die Route, mit der die Anforderung verarbeitet wurde, und prüfen Sie die folgenden Einstellungen:
authentication.audiencesenthält die Zielgruppe, für die das Token ausgegeben wurde.authentication.issuersenthält den Identitätsprovider, der das Token ausgegeben hat.verifyClaimsenthält nur die Ansprüche und Werte, die von der Route durchgesetzt werden müssen.maxClockSkewInSecondsberücksichtigt die erwartete Zeitdifferenz zwischen dem Tokenaussteller und den Systemen, die die Anforderung validieren.
Wenn der Fehler zeitabhängig ist, vergleichen Sie den Wert exp des Tokens mit der aktuellen UTC-Zeit und der konfigurierten Clock-Skew-Zulage.
Logmeldungen prüfen
Prüfen Sie das API-Gateway-Ausführungslog in Logging auf die nicht erfolgreiche Anforderung. Verwenden Sie die Anforderungs-ID aus der Antwort, um den übereinstimmenden Logeintrag zu suchen.
Suchen Sie nach Authentifizierungsfehlerereignissen wie den folgenden Ereignissen:
jwtAuthentication.authenticationFailedtokenAuthentication.authenticationFailed
Prüfen Sie anschließend die Logmeldung auf die nicht erfolgreiche Anspruchsvalidierung. Die Nachricht kann den Anspruch oder Wert identifizieren, der die Policy nicht erfüllt hat.
Validation failed for 'exp' claim.JWT token not issued by the configured issuers.JWT token not issued for the configured audience.JWT token missing required claim '<claim>'.JWT token does not have the expected claim value for '<claim>'.
Tokenansprüche validieren
Verwenden Sie die Validierungsmethode, die mit dem Tokentyp übereinstimmt.
Bei einem JSON Web Token (JWT) decodieren Sie die Payload, und vergleichen Sie die relevanten Claims mit der Deployment-Konfiguration. Prüfen Sie die Werte für aud, iss, exp und erforderliche benutzerdefinierte Claims.
import base64
import json
token = "<paste-jwt-here>"
payload = token.split(".")[1]
payload += "=" * (-len(payload) % 4)
print(json.dumps(json.loads(base64.urlsafe_b64decode(payload)), indent=2))Rufen Sie bei einem undurchsichtigen Token den konfigurierten Introspektionsendpunkt direkt auf. Vergleichen Sie die zurückgegebenen Werte aud, iss, exp und benutzerdefinierte Claims mit der API-Gateway-Deployment-Policy.
curl -sS -u "<client-id>:<client-secret>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=<paste-token-here>" \
"https://<identity-provider>/oauth2/v1/introspect"Validieren Sie das Token anhand der genauen Deployment- und Routingkonfiguration, mit der die nicht erfolgreiche Anforderung verarbeitet wurde.
Unstimmigkeiten bei Ansprüchen beheben
Wenden Sie den Fix an, der mit der nicht erfolgreichen Validierungsprüfung übereinstimmt:
- Wenn die Zielgruppe falsch ist, aktualisieren Sie
authentication.audiences, oder verwenden Sie ein Token, das für die erwartete Zielgruppe ausgegeben wurde. - Wenn der Aussteller falsch ist, aktualisieren Sie
authentication.issuers, oder verwenden Sie ein Token des erwarteten Identitätsproviders. - Wenn ein erforderlicher benutzerdefinierter Claim fehlt, aktualisieren Sie den Tokenausgabeprozess, oder aktualisieren Sie
verifyClaimsentsprechend der beabsichtigten Anforderung. - Wenn ein erforderlicher benutzerdefinierter Claim den falschen Wert aufweist, korrigieren Sie den Tokenanspruchswert, oder aktualisieren Sie den erwarteten Wert in
verifyClaims. - Wenn das Token abgelaufen ist, wiederholen Sie die Anforderung mit einem gültigen Token.
- Wenn der Fehler durch eine Clock-Skew verursacht wird, passen Sie
maxClockSkewInSecondsnur an, wenn der Zeitunterschied erwartet und für Ihre Sicherheitsanforderungen akzeptabel ist.
Tokenvalidierung prüfen
Nachdem Sie die Policy aktualisiert oder die Anforderung mit einem korrigierten Token erneut versucht haben, prüfen Sie das Ergebnis:
- Senden Sie dieselbe Anforderung erneut.
- Bestätigen Sie, dass das Deployment die Anforderung akzeptiert.
- Vergewissern Sie sich, dass im Ausführungslog der Fehler bei der Anspruchsvalidierung nicht mehr angezeigt wird.
Weitere Informationen
Weitere Informationen finden Sie unter: