OCI-Service-API-Aufrufe sind nach dem Proxy über API Gateway nicht erfolgreich
Erfahren Sie, wie Sie Fehler bei OCI-Service-API-Aufrufen beheben, die nach der erfolgreichen Erstellung von API-Gateways und API-Deployments mit dem API-Gateway-Service nicht erfolgreich sind.
OCI-Service-API-Aufrufe können nicht erfolgreich verlaufen, nachdem API Gateway sie verantwortet hat, selbst wenn dieselben Aufrufe erfolgreich sind, wenn sie direkt an den OCI-Service gesendet werden. Dieses Problem tritt häufig auf, weil der OCI-Zielservice eine Anforderungssignatur validiert, die nicht mehr mit der Anforderung übereinstimmt, die der Service erhält.
Viele OCI-Service-APIs validieren eine Signatur über das endgültige Anforderungsziel, den Host, die Methode, den Body und die ausgewählten Header. Wenn API Gateway beim Proxying der Anforderung einen signierten Wert ändert, kann der OCI-Zielservice die Anforderung ablehnen.
Problemsymptome
Möglicherweise sehen Sie eines oder mehrere der folgenden Symptome:
-
Ein Client kann den OCI-Service direkt aufrufen, aber derselbe Aufruf verläuft nicht erfolgreich, wenn er über API Gateway weitergeleitet wird.
-
Eine Anforderung, die OCI-API-Schlüsselsignatur oder einen anderen OCI-Anforderungssignaturfluss verwendet, verläuft nur dann nicht erfolgreich, wenn sie über das Gateway weitergeleitet wird.
-
Die Proxyanforderung gibt einen Autorisierungs- oder Signaturvalidierungsfehler vom OCI-Zielservice zurück.
-
Aufrufe an einen OCI-Serviceendpunkt, wie generative KI oder eine andere OCI-API, die signierte OCI-Anforderungen erwartet, sind nicht erfolgreich, nachdem API Gateway die Anforderung weiterleitet.
Mögliche Gründe
Dieses Problem kann aus folgenden Gründen auftreten:
-
Der Client signiert die ursprüngliche Anforderung für den API-Gateway-Endpunkt anstelle des endgültigen OCI-Serviceendpunkts.
-
Der
Host-Header, den der OCI-Zielservice empfängt, unterscheidet sich vomhost-Wert, der zum Erstellen der Signatur verwendet wurde. -
Der signierte
(request-target)-Wert stimmt nicht mit dem endgültigen Anforderungspfad und der Methode überein. -
Erforderliche Signaturheader, wie
date,hostoderx-content-sha256, stimmen nicht mit der endgültigen ausgehenden Anforderung überein. -
API Gateway kann Header weiterleiten, berechnet OCI-Anforderungssignaturen jedoch nicht für generische OCI-Serviceaufrufe mit Proxy neu.
Signaturanforderungen prüfen
Bestätigen Sie, ob der OCI-Zielservice die OCI-Anforderungssignatur erfordert. Vergleichen Sie dann die Clientanforderung mit der Anforderung, die der OCI-Zielservice empfängt.
Prüfen Sie die folgenden Anforderungsdetails:
-
Prüfen Sie den
Authorization-Header der Clientanforderung. -
Prüfen Sie, ob der
Authorization-Header mitSignaturebeginnt. -
Geben Sie die Header an, die in der Liste der abgezeichneten Header enthalten sind.
-
Bestätigen Sie, ob die Signatur für den endgültigen Ziel-URI, die HTTP-Methode und den Anforderungsbody erstellt wurde, den der OCI-Service empfängt.
Wenn die Anforderung für den API-Gateway-Hostnamen und -Pfad anstelle des endgültigen OCI-Serviceendpunkts signiert wird, lehnt der OCI-Service die Anforderung ab.
Abgezeichnete Kopfzeilen prüfen
Prüfen Sie die signierte Anforderung für Header, die OCI Request Signing häufig verwendet:
-
Authorization -
date -
host -
x-content-sha256 -
content-type -
content-length
Wenn der OCI-Zielservice Anforderungssignaturen validiert, müssen die signierten Werte genau mit der endgültigen ausgehenden Anforderung übereinstimmen.
Erfassen Sie die API-Gatewayantwort, und notieren Sie die zurückgegebene opc-request-id. Verwenden Sie die Anforderungs-ID, um den fehlerhaften Proxyaufruf mit Logs und serviceseitigen Diagnosen zu korrelieren.
OCI-Serviceproxyaufrufe korrigieren
Verwenden Sie ein Design, das die Anforderung signiert, die der OCI-Service erhält. Verlassen Sie sich nicht nur auf die Headerweiterleitung, um eine signierte OCI-Serviceanfrage nach dem Proxying gültig zu machen.
Verwenden Sie den Fix, der Ihrem Integrationsmuster entspricht:
-
Wenn der OCI-Zielservice eine signierte Anforderung erfordert, signieren Sie die endgültige ausgehende Anforderung außerhalb des API-Gateways.
-
Wenn API Gateway die Integration voranstellen muss, platzieren Sie eine Komponente hinter API Gateway, das die richtige von OCI signierte Anforderung an den Zielservice generiert. Für dieses Muster ist ein Functions-Backend oft ein praktikabler Ansatz, da die Funktion den OCI-Service mit einem eigenen OCI-Authentifizierungsfluss aufrufen kann.
Headerweiterleitungslimits verstehen
API Gateway kann Header weiterleiten, aber weitergeleitete Header reparieren keine Unstimmigkeiten bei der OCI-Anforderungssignatur.
Die unveränderte Übergabe des ursprünglichen Authorization-Headers ist nicht ausreichend, wenn sich einer oder mehrere der folgenden Werte ändern:
-
Der endgültige
host-Wert. -
Der endgültige Anforderungspfad.
-
Das signierte Headerset.
-
Der Body-Hash, den der OCI-Zielservice validiert.
OCI-Serviceproxyaufrufe prüfen
Nachdem Sie das Integrationsdesign geändert haben, prüfen Sie, ob die Proxyanforderung erfolgreich ist.
Verwenden Sie die folgenden Prüfungen:
-
Senden Sie die Anforderung über den aktualisierten Anforderungspfad.
-
Bestätigen Sie, dass der OCI-Zielservice die Anforderung akzeptiert.
-
Vergewissern Sie sich, dass die Anforderung für den endgültigen OCI-Serviceendpunkt anstelle des API-Gatewayendpunkts signiert ist.
-
Stellen Sie sicher, dass die zurückgegebene
opc-request-idkeinem Signatur- oder Autorisierungsfehler mehr entspricht.
Weitere Informationen
Weitere Informationen finden Sie unter: