Aggiunta del logout come backend del gateway API
Scopri come definire un back-end di logout con API Gateway.
Un requisito comune è che le API forniscano la funzionalità per consentire ai client API di eseguire il logout in modo pulito revocando i token di accesso e potenzialmente richiamando altri URL per eseguire ulteriori task successivi al logout. Gateway API consente di definire i backend di logout per fornire tale funzionalità quando si utilizza un criterio di autenticazione token OAuth 2.0 per una distribuzione API. Le richieste al back-end di logout possono facoltativamente includere un URL successivo al logout come valore di un parametro di query denominato postLogoutUrl
.
Quando si definisce un criterio di autenticazione token OAuth 2.0 , è possibile specificare facoltativamente un percorso del back-end di logout (il percorso di logout) per revocare i token di accesso in caso di errore di autenticazione. Vedere Convalida dei token per l'aggiunta di autenticazione e autorizzazione alle distribuzioni API.
La definizione del back-end di logout include facoltativamente:
- Lista di URL successivi al logout consentiti a cui è possibile reindirizzare una richiesta per revocare i token di accesso. Se il parametro di query
postLogoutUrl
è incluso nella richiesta, il relativo valore deve essere uno di questi URL. Gli URL nella lista possono essere percorsi assoluti o percorsi relativi e gli URL possono includere variabili di contesto. Tenere presente che se si specifica un percorso relativo (ovvero un altro instradamento nella distribuzione dell'API), sia la distribuzione dell'API che l'instradamento devono consentire l'accesso anonimo. Inoltre, se non si includono in modo esplicito uno o più URL nella lista, è consentito qualsiasi URL successivo al logout. - Dati da passare agli URL di logout quando la richiesta viene reindirizzata, come valore del parametro di query
state
. I dati possono includere solo variabili di contesto (non valori statici).
Alla ricezione di una richiesta al percorso di logout da un client API, il gateway API controlla che il client API sia autenticato per richiamare il back-end di logout, controlla che sia consentito qualsiasi URL successivo al logout incluso nella richiesta e rimuove qualsiasi informazione memorizzata sulla sessione del client API (ad esempio, nei cookie). Supponendo che l'URL successivo al logout sia consentito, l'operazione successiva dipende dal fatto che il client API sia autenticato e dal fatto che la risposta inserita nella cache in precedenza dall'URL di ricerca automatica specificato nel criterio di autenticazione del token OAuth 2.0 abbia fornito un endpoint della sessione finale:
- Se il client API non è autenticato, il gateway API reindirizza la richiesta di logout all'URL successivo al logout.
- Se il client API è stato autenticato, ma il criterio di autenticazione del token OAuth 2.0 non ha fornito un endpoint della sessione finale, il gateway API reindirizza la richiesta di logout all'URL successivo al logout e passa le informazioni sullo stato specificate nella definizione del back-end di logout.
- Se il client API è stato autenticato e il criterio di autenticazione del token OAuth 2.0 ha fornito un endpoint della sessione finale, il gateway API reindirizza la richiesta di logout a tale endpoint della sessione finale e passa l'URL successivo al logout e qualsiasi informazione sullo stato specificata nella definizione del back-end di logout. In questo caso, è responsabilità del provider di identità reindirizzare la richiesta all'URL successivo al logout.
È possibile aggiungere un backend di logout a una specifica di distribuzione API effettuando le operazioni riportate di seguito.
- utilizzo di Console
- modifica di un file JSON
Utilizzo della console per aggiungere backend di logout a una specifica di distribuzione API
Per aggiungere back-end di logout a una specifica di distribuzione API utilizzando la console:
-
Creare o aggiornare una distribuzione API utilizzando la console, selezionare l'opzione Da zero e immettere i dettagli nella pagina Informazioni di base.
Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.
-
Nella pagina Autenticazione specificare le opzioni di autenticazione.
Per ulteriori informazioni sulle opzioni di autenticazione, vedere Aggiunta di autenticazione e autorizzazione alle distribuzioni API.
-
Nella pagina Cicli creare un nuovo instradamento e specificare:
-
Percorso: un percorso per le chiamate API che utilizzano i metodi elencati per il servizio backend. Tenere presente che il percorso di instradamento specificato è il seguente:
- è relativo al prefisso del percorso di distribuzione (vedere Distribuzione di un'API in un gateway API mediante la creazione di una distribuzione API)
- deve essere preceduta da una barra ( / ) e può essere solo la singola barra
- può contenere più barre in avanti (a condizione che non siano adiacenti) e può terminare con una barra in avanti
- può includere caratteri alfanumerici maiuscoli e minuscoli
- può includere i caratteri speciali
$ - _ . + ! * ' ( ) , % ; : @ & =
- può includere parametri e caratteri jolly (vedere Aggiunta di parametri di percorso e caratteri jolly ai percorsi di instradamento)
- Metodi: uno o più metodi accettati dal servizio backend. Nel caso di back-end di logout, è accettato solo
GET
. - Tipo backend: il tipo di servizio backend è
Logout
. - URI post logout consentiti: (facoltativo) lista di uno o più URL consentiti ai quali è possibile reindirizzare una richiesta di logout per revocare i token. Gli URL nella lista possono essere percorsi assoluti o percorsi relativi e gli URL possono includere variabili di contesto. Ad esempio,
["https://${request.header[tenant-id].page.html}", "https://fixed-path.page.html",
."/logout_html"
]Nota:
- Un URL successivo al logout può essere incluso in una richiesta al back-end di logout come valore di un parametro di query denominato
postLogoutUrl
. - Se si specifica un percorso relativo (ovvero un altro instradamento nella distribuzione API), sia la distribuzione API che l'instradamento devono consentire l'accesso anonimo.
- Se non si includono in modo esplicito uno o più URL nella lista, è consentito qualsiasi URL successivo al logout.
- Un URL successivo al logout può essere incluso in una richiesta al back-end di logout come valore di un parametro di query denominato
- Stato successivo al logout: (facoltativo) dati da passare quando una richiesta di logout viene reindirizzata a un endpoint della sessione finale e/o a un URL successivo al logout. I dati possono includere solo variabili di contesto (non valori statici). Ad esempio,
request.query[region]
I dati vengono passati come valore del parametro di query
state
.
-
- (Facoltativo) Fare clic su Altro instradamento per immettere i dettagli degli instradamenti aggiuntivi.
- Fare clic su Successivo per esaminare i dettagli immessi per la distribuzione API.
- Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
- (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).
Modifica di un file JSON per aggiungere backend di logout a una specifica di distribuzione API
Per aggiungere back-end di logout a una specifica di distribuzione API in un file JSON, effettuare le operazioni riportate di seguito.
-
Utilizzando l'editor JSON preferito, modificare la specifica di distribuzione API esistente alla quale si desidera aggiungere un backend di logout o creare una nuova specifica di distribuzione API (vedere Creazione di una specifica di distribuzione API).
Ad esempio, la seguente specifica di distribuzione API di base definisce una semplice funzione serverless Hello World in Oracle Functions come un singolo backend:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
Nella sezione
routes
, includere una nuova sezione per un back-end di logout:{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } }, { "path": "<logout-route-path>", "methods": ["<method-list>"], "backend": { "type": "OAUTH2_LOGOUT", "allowedPostLogoutUris": ["<url>", "<url"], "postLogoutState": "<logout-data>" } } ] }
dove:
-
<logout-route-path>
specifica un percorso per le chiamate che utilizzano i metodi elencati per il back-end di logout. Tenere presente che il percorso di instradamento specificato è il seguente:- è relativo al prefisso del percorso di distribuzione (vedere Distribuzione di un'API in un gateway API mediante la creazione di una distribuzione API)
- deve essere preceduta da una barra ( / ) e può essere solo la singola barra
- può contenere più barre in avanti (a condizione che non siano adiacenti) e può terminare con una barra in avanti
- può includere caratteri alfanumerici maiuscoli e minuscoli
- può includere i caratteri speciali
$ - _ . + ! * ' ( ) , % ; : @ & =
-
può includere parametri e caratteri jolly (vedere Aggiunta di parametri di percorso e caratteri jolly ai percorsi di instradamento)
<method-list>
specifica uno o più metodi accettati dal back-end di logout, separati da virgole. Nel caso di back-end di logout, è accettato soloGET
."type": "OAUTH2_LOGOUT"
specifica che il backend è un backend di logout.-
"allowedPostLogoutUris": ["<url>", "<url>"]
specifica facoltativamente una lista di uno o più URL consentiti ai quali è possibile reindirizzare una richiesta di logout per revocare i token. Gli URL nella lista possono essere percorsi assoluti o percorsi relativi e gli URL possono includere variabili di contesto. Ad esempio,["https://${request.header[tenant-id].page.html}", "https://fixed-path.page.html",
."/logout_html"
]Nota:
- Un URL successivo al logout può essere incluso in una richiesta al back-end di logout come valore di un parametro di query denominato
postLogoutUrl
. - Se si specifica un percorso relativo (ovvero un altro instradamento nella distribuzione API), sia la distribuzione API che l'instradamento devono consentire l'accesso anonimo.
- Se non si includono in modo esplicito uno o più URL nella lista, è consentito qualsiasi URL successivo al logout.
- Un URL successivo al logout può essere incluso in una richiesta al back-end di logout come valore di un parametro di query denominato
-
"postLogoutState": "<logout-data>"
specifica facoltativamente i dati da passare quando una richiesta di logout viene reindirizzata a un endpoint della sessione finale e/o a un URL successivo al logout. I dati possono includere solo variabili di contesto (non valori statici). Ad esempio,request.query[region]
I dati vengono passati come valore del parametro di query
state
.
In questo esempio, una richiesta al backend
/logout
può includere uno degli URL specificati perallowedPostLogoutUris
come valore del parametro di querypostLogoutUrl
. Quando viene richiamato l'URL successivo al logout, il valore della variabile di contestorequest.query[region]
viene passato all'URL. In questo esempio, uno dei valoriallowedPostLogoutUris
("/logout_html"
) è un percorso relativo al back-end di risposta stock/logout_html
nella stessa distribuzione API. Poiché si tratta di un percorso relativo a un altro instradamento nella stessa distribuzione API, il backend/logout_html
deve includere un criterio di autorizzazione di tipoANONYMOUS
, come mostrato qui.{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } }, { "path": "/logout", "methods": ["GET"], "backend": { "type": "OAUTH2_LOGOUT", "allowedPostLogoutUris": ["https://${request.header[tenant-id].page.html}", "/logout_html"], "postLogoutState": "request.query[region]" } }, { "path": "/logout_html", "methods": ["GET"], "backend": { "type": "STOCK_RESPONSE_BACKEND", "body": "Token could not be revoked." }, "requestPolicies": { "authorization": { "type": "ANONYMOUS" } } } ] }
-
- Salvare il file JSON contenente la specifica di distribuzione API.
-
Utilizzare la specifica di distribuzione API quando si crea o si aggiorna una distribuzione API nei modi riportati di seguito.
- specificando il file JSON nella console quando si seleziona l'opzione Carica un'interfaccia API esistente
- specificando il file JSON in una richiesta all'API REST del gateway API
Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.
- (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).