Chiamate API del servizio OCI non riuscite dopo essere state sottoposte a proxy tramite il gateway API
Scopri come risolvere i problemi relativi alle chiamate API del servizio OCI che non riescono dopo essere state sottoposte a proxy tramite un gateway, dopo aver creato correttamente gateway API e distribuzioni API con il servizio Gateway API.
Le chiamate API del servizio OCI possono non riuscire dopo che il gateway API le ha sottoposte a proxy, anche quando le stesse chiamate hanno esito positivo quando vengono inviate direttamente al servizio OCI. Questo problema si verifica spesso perché il servizio OCI di destinazione convalida una firma di richiesta che non corrisponde più alla richiesta ricevuta dal servizio.
Molte API di servizi OCI convalidano una firma sulla destinazione finale della richiesta, sull'host, sul metodo, sul corpo e sulle intestazioni selezionate. Se il gateway API modifica qualsiasi valore firmato durante il proxy della richiesta, il servizio OCI di destinazione può rifiutare la richiesta.
Sintomi problema
Potresti vedere uno o più dei seguenti sintomi:
-
Un client può chiamare direttamente il servizio OCI, ma la stessa chiamata non riesce quando viene instradata tramite il gateway API.
-
Una richiesta che utilizza la firma della chiave API OCI o un altro flusso di firma della richiesta OCI non riesce solo quando viene instradata tramite il gateway.
-
La richiesta proxy restituisce un errore di convalida dell'autorizzazione o della firma dal servizio OCI di destinazione.
-
Le chiamate a un endpoint del servizio OCI, ad esempio l'AI generativa o un'altra API OCI che prevede richieste OCI firmate, non riescono dopo che il gateway API esegue il proxy della richiesta.
Cause possibili
Questo problema può verificarsi per i seguenti motivi:
-
Il client firma la richiesta originale per l'endpoint del gateway API anziché l'endpoint finale del servizio OCI.
-
L'intestazione
Hostricevuta dal servizio OCI di destinazione è diversa dal valorehostutilizzato per creare la firma. -
Il valore
(request-target)firmato non corrisponde al percorso e al metodo di richiesta finale. -
Le intestazioni di firma obbligatorie, ad esempio
date,hostox-content-sha256, non corrispondono alla richiesta finale in uscita. -
Il gateway API può inoltrare le intestazioni, ma non ricalcola le firme delle richieste OCI per le chiamate di servizio OCI con proxy generico.
Esamina requisiti firma
Confermare se il servizio OCI di destinazione richiede la firma della richiesta OCI. Quindi, confrontare la richiesta del client con la richiesta ricevuta dal servizio OCI di destinazione.
Esaminare i dettagli della richiesta riportati di seguito.
-
Ispezionare l'intestazione
Authorizationdella richiesta client. -
Verificare se l'intestazione
Authorizationinizia conSignature. -
Identificare le intestazioni incluse nell'elenco di intestazioni firmate.
-
Confermare se la firma è stata creata per l'URI di destinazione finale, il metodo HTTP e il corpo della richiesta ricevuti dal servizio OCI.
Se la richiesta viene firmata per il nome host e il percorso del gateway API anziché l'endpoint finale del servizio OCI, il servizio OCI rifiuta la richiesta.
Rivedi intestazioni firmate
Rivedere la richiesta firmata per le intestazioni che la firma della richiesta OCI utilizza comunemente:
-
Authorization -
date -
host -
x-content-sha256 -
content-type -
content-length
Se il servizio OCI di destinazione convalida le firme delle richieste, i valori firmati devono corrispondere esattamente alla richiesta in uscita finale.
Acquisire la risposta del gateway API e registrare l'indirizzo opc-request-id restituito. Utilizzare l'ID richiesta per correlare la chiamata con proxy non riuscita con i log e la diagnostica lato servizio.
Correggere le chiamate proxy del servizio OCI
Utilizzare una progettazione che segni la richiesta che il servizio OCI riceve. Non fare affidamento solo sull'inoltro dell'intestazione per rendere valida una richiesta di servizio OCI firmata dopo il proxy.
Utilizzare la correzione corrispondente al pattern di integrazione:
-
Se il servizio OCI di destinazione richiede una richiesta firmata, firmare la richiesta in uscita finale al di fuori del gateway API.
-
Se il gateway API deve affrontare l'integrazione, posizionare un componente dietro il gateway API che genera la richiesta corretta firmata da OCI al servizio di destinazione. Per questo pattern, un backend Functions è spesso un approccio utilizzabile perché la funzione può chiamare il servizio OCI con il proprio flusso di autenticazione OCI.
Comprendere i limiti di inoltro dell'intestazione
Il gateway API può inoltrare le intestazioni, ma le intestazioni inoltrate non risolvono le mancate corrispondenze della firma della richiesta OCI.
Il passaggio dell'intestazione Authorization originale invariata non è sufficiente quando vengono modificati uno o più dei seguenti valori:
-
Il valore finale
host. -
Percorso della richiesta finale.
-
Intestazione firmata impostata.
-
Hash del corpo convalidato dal servizio OCI di destinazione.
Verifica chiamate proxy servizio OCI
Dopo aver modificato la progettazione dell'integrazione, verificare che la richiesta proxy riesca.
Utilizzare i controlli riportati di seguito.
-
Inviare la richiesta tramite il percorso della richiesta aggiornato.
-
Confermare che il servizio OCI di destinazione accetta la richiesta.
-
Confermare che la richiesta è firmata per l'endpoint finale del servizio OCI anziché per l'endpoint del gateway API.
-
Verificare che il valore restituito
opc-request-idnon corrisponda più a un errore di firma o autorizzazione.
Per ulteriori informazioni
Per ulteriori informazioni, fare riferimento agli argomenti sotto riportati.