Headertransformationen funktionieren nicht wie erwartet
Erfahren Sie, wie Sie Fehler bei Headertransformationen beheben, die beim Erstellen von API-Deployments mit dem API Gateway-Service keine Header wie erwartet hinzufügen, ersetzen oder umbenennen.
Wenn API Gateway einen Header nicht wie erwartet hinzufügt, ersetzt oder umbenennt, prüfen Sie zunächst, ob die Routing- und Policy-Konfiguration den erforderlichen Kontextwert für die Transformation verfügbar macht. Die Transformation kann auch auf einen geschützten Header ausgerichtet sein, einen ungültigen Headerwert erzeugen oder eine ifExists-Einstellung verwenden, die den vorhandenen Headerwert behält.
Problemsymptome
Möglicherweise sehen Sie eines oder mehrere der folgenden Symptome:
- Der Backend-Service empfängt nicht den Header, den Sie vom API-Gateway erwarten.
- Der Header ist vorhanden, aber der Wert ist leer oder unverändert.
- Die Headertransformation scheint korrekt konfiguriert zu sein, aber die Anforderung, die an den Backend-Service gesendet wird, enthält nicht die erwartete Headeränderung.
Mögliche Gründe
Dieses Problem kann eine oder mehrere der folgenden Ursachen haben:
- Die Route verwendet eine
ANONYMOUS-Autorisierungs-Policy, sodass das API-Gateway keinerequest.auth[...]-Werte für die Route auffüllt. - Die Headertransformation versucht, einen geschützten Anforderungsheader oder geschützten Antwortheader zu ändern, den API Gateway nicht transformiert.
- Der Transformationsausdruck gibt einen ungültigen Wert zurück oder erzeugt keinen verwendbaren Wert.
- Mit der Einstellung
ifExistsbleibt der ursprüngliche Header unverändert.
Routenkonfiguration prüfen
Prüfen Sie die Route, mit der die Anforderung verarbeitet wurde, und prüfen Sie die folgenden Details:
- Die Anforderung entsprach der erwarteten Route.
- Die Route verwendet die erwartete Einstellung
requestPolicies.authentication. - Die Route enthält die erwartete Transformation im Abschnitt
requestPolicies.headerTransformationsoderresponsePolicies.headerTransformations. - Die Transformation hängt nur von
request.auth[...]ab, wenn die Route die Authentifizierung ausführt. - Der Zielheader ist kein geschützter Anforderungsheader oder geschützter Antwortheader, den API Gateway der Transformation verweigert.
Wenn die Transformation einen Ausdruck wie ${request.auth[access_token_claims][claim1]} verwendet, muss die Route eine Autorisierungs-Policy verwenden, die Authentifizierung ausführt. Wenn eine Route die Autorisierungs-Policy ANONYMOUS verwendet, authentifiziert das API-Gateway die Anforderung nicht und füllt keine request.auth[...]-Werte auf.
Route und Logs prüfen
- Öffnen Sie in der Konsole das API-Deployment, das die Anforderung verarbeitet hat.
- Prüfen Sie die Matching Route, Authentifizierungs-Policy und Headertransformations-Policy.
- Senden Sie dieselbe Anforderung erneut, um ein neues nicht erfolgreiches Beispiel zu erstellen.
- Öffnen Sie in OCI Logging das API-Gateway-Zugriffslog und das Ausführungslog für das Deployment.
- Verwenden Sie die Anforderungs-ID aus der Antwort, um dieselbe Anforderung in beiden Logs zu finden.
- Prüfen Sie im Ausführungslog die Anforderung auf Headertransformationsfehler.
Logmeldungen prüfen
Prüfen Sie das Ausführungslog für die nicht erfolgreiche Anforderung. Die folgenden Logeinträge können angeben, warum das API-Gateway die Transformation übersprungen oder abgelehnt hat:
headerTransformation.protectedHeaderTransformed: Die Policy hat versucht, einen geschützten Header zu transformieren.headerTransformation.badHeaderValue: Der gerenderte Headerwert enthielt nicht unterstützte Zeichen oder war anderweitig ungültig.headerTransformation.missingSetValues: Der Transformationsausdruck hat keinen gültigen Wert erzeugt. Daher hat das API-Gateway die Headeraktualisierung übersprungen.
Headertransformationen korrigieren
Verwenden Sie den Fix, der mit der gefundenen Ursache übereinstimmt:
- Wenn die Transformation von Token Claims abhängt, ändern Sie die Route so, dass eine authentifizierte Autorisierungs-Policy wie
AUTHENTICATION_ONLYanstelle vonANONYMOUSverwendet wird. - Wenn die Anforderung von Tokenansprüchen abhängt, senden Sie die Anforderung erneut mit einem gültigen Token, und prüfen Sie, ob die Tokenvalidierung erfolgreich ist.
- Wenn die Transformation auf einen geschützten Header abzielt, aktualisieren Sie die Policy so, dass ein anderer Header verwendet wird.
- Wenn der Ausdruck ein ungültiges oder leeres Ergebnis wiedergibt, aktualisieren Sie den Ausdruck so, dass der Ausdruck einen gültigen Headerwert erzeugt.
- Wenn das Ergebnis unverändert angezeigt wird, prüfen Sie die Einstellung
ifExists.SKIPbehält einen vorhandenen Header unverändert bei, undAPPENDfügt Werte hinzu, ohne den ursprünglichen Header zu ersetzen.
Headertransformationen prüfen
Nachdem Sie die Route oder Policy aktualisiert haben, prüfen Sie, ob die Headertransformation wie erwartet funktioniert:
- Senden Sie dieselbe Anforderung erneut.
- Prüfen Sie, ob der Backend-Service den erwarteten Header und Wert empfängt.
- Stellen Sie sicher, dass im Ausführungslog die in diesem Thema beschriebenen Headertransformationsfehler nicht angezeigt werden.