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 vom host-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, host oder x-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 mit Signature beginnt.

  • 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-id keinem Signatur- oder Autorisierungsfehler mehr entspricht.

Weitere Informationen

Weitere Informationen finden Sie unter: