Adición de desconexión como backend de gateway de API
Descubra cómo definir un backend de desconexión con API Gateway.
Un requisito común es que las API proporcionen la utilidad para que los clientes de API se desconecten sin problemas mediante la revocación de tokens de acceso y, potencialmente, llamen a otras URL para realizar tareas posteriores al cierre de sesión adicionales. API Gateway permite definir backends de desconexión para proporcionar dicha funcionalidad al utilizar una política de autenticación de token OAuth 2.0 para un despliegue de API. Las solicitudes al backend de desconexión pueden incluir opcionalmente una URL posterior a la desconexión como valor de un parámetro de consulta denominado postLogoutUrl
.
Al definir una política de autenticación de token OAuth 2.0, puede especificar opcionalmente una ruta al backend de desconexión (la ruta de desconexión) para revocar tokens de acceso en caso de fallo de autenticación. Consulte Validación de tokens para agregar autenticación y autorización a despliegues de API.
La definición de backend de desconexión incluye opcionalmente:
- Lista de URL posteriores a la desconexión permitidas a las que se puede redirigir una solicitud para revocar tokens de acceso. Si el parámetro de consulta
postLogoutUrl
está incluido en la solicitud, su valor debe ser una de estas URL. Las URL de la lista pueden ser rutas absolutas o relativas, y las URL pueden incluir variables de contexto. Tenga en cuenta que si especifica una ruta de acceso relativa (es decir, a otra ruta del despliegue de API), tanto el despliegue de API como la ruta deben permitir el acceso anónimo. Tenga en cuenta también que si no incluye explícitamente una o más URL en la lista, se permite cualquier URL posterior a la desconexión. - Datos que se transfieren a las URL de desconexión cuando se redirige la solicitud, como valor del parámetro de consulta
state
. Los datos solo pueden incluir variables de contexto (no valores estáticos).
Al recibir una solicitud a la ruta de acceso de desconexión de un cliente de API, el gateway de API comprueba que el cliente de API está autenticado para llamar al backend de desconexión, comprueba que se permite cualquier URL posterior a la desconexión incluida en la solicitud y elimina cualquier información almacenada sobre la sesión del cliente de API (por ejemplo, en cookies). Suponiendo que se permite la URL posterior a la desconexión, lo que sucede a continuación depende de si el cliente de API está autenticado y de si la respuesta almacenada en caché previamente de la URL de detección especificada en la política de autenticación de token OAuth 2.0 ha proporcionado un punto final de sesión final:
- Si el cliente de API no está autenticado, el gateway de API redirecciona la solicitud de desconexión a la URL posterior a la desconexión.
- Si el cliente de API está autenticado, pero la política de autenticación de token OAuth 2.0 no ha proporcionado un punto final de sesión final, el gateway de API redirecciona la solicitud de desconexión a la URL posterior a la desconexión y transfiere cualquier información de estado especificada en la definición de backend de desconexión.
- Si el cliente de API está autenticado y la política de autenticación de token OAuth 2.0 ha proporcionado un punto final de sesión final, el gateway de API redirecciona la solicitud de desconexión a ese punto final de sesión final y transfiere la URL posterior a la desconexión, así como cualquier información de estado especificada en la definición de backend de desconexión. En este caso, es responsabilidad del proveedor de identidad redirigir la solicitud a la URL posterior a la desconexión.
Puede agregar un backend de desconexión a una especificación de despliegue de API mediante:
- uso de la consola
- edición de un archivo JSON
Uso de la consola para agregar backends de desconexión a una especificación de despliegue de API
Para agregar backends de desconexión a una especificación de despliegue de API mediante la consola:
-
Cree o actualice un despliegue de API con la consola, seleccione la opción Desde cero e introduzca los detalles en la página Información básica.
Para obtener más información, consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API y Actualización de un gateway de API.
-
En la página Autenticación, especifique las opciones de autenticación.
Para obtener más información sobre las opciones de autenticación, consulte Agregación de autenticación y autorización a despliegues de API.
-
En la página Rutas, cree una nueva ruta y especifique:
-
Ruta de acceso: ruta de acceso al servicio de backend para llamadas de API mediante los métodos enumerados. Tenga en cuenta que la ruta de acceso especificada:
- Es relativa al prefijo de ruta de acceso de despliegue (consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API).
- Debe estar precedida de una barra inclinada (/) y puede ser simplemente esa barra inclinada.
- Puede contener varias barras inclinadas (siempre que no sean adyacentes) y puede terminar con una barra inclinada.
- Puede incluir caracteres alfanuméricos en mayúscula y minúscula.
- Puede incluir los caracteres especiales
$ - _ . + ! * ' ( ) , % ; : @ & =
. - Puede incluir parámetros y comodines (consulte Agregación de parámetros de ruta y comodines a rutas de acceso).
- Métodos: uno o varios métodos aceptados por el servicio de backend. En el caso de backends de desconexión, solo se acepta
GET
. - Tipo de backend: el tipo de servicio de backend es
Logout
. - URI posteriores a la desconexión permitidos: (opcional) lista de una o más URL permitidas a las que se puede redirigir una solicitud de desconexión para revocar tokens. Las URL de la lista pueden ser rutas absolutas o rutas relativas, y las URL pueden incluir variables de contexto. Por ejemplo,
["https://${request.header[tenant-id].page.html}", "https://fixed-path.page.html",
."/logout_html"
]Tenga en cuenta que:
- Una URL posterior a la desconexión se puede incluir en una solicitud al backend de desconexión como valor de un parámetro de consulta denominado
postLogoutUrl
. - Si especifica una ruta de acceso relativa (es decir, a otra ruta del despliegue de API), tanto el despliegue de API como la ruta deben permitir el acceso anónimo.
- Si no incluye explícitamente una o más URL en la lista, se permite cualquier URL posterior a la desconexión.
- Una URL posterior a la desconexión se puede incluir en una solicitud al backend de desconexión como valor de un parámetro de consulta denominado
- Estado posterior a la desconexión: (opcional) datos que se transferirán cuando se redirija una solicitud de desconexión a un punto final de sesión final y/o una URL posterior a la desconexión. Los datos solo pueden incluir variables de contexto (no valores estáticos). Por ejemplo,
request.query[region]
Los datos se transfieren como valor del parámetro de consulta
state
.
-
- (Opcional) Seleccione Another Route para introducir detalles de rutas adicionales.
- Seleccione Siguiente para revisar los detalles introducidos para el despliegue de API.
- Seleccione Crear o Guardar cambios para crear o actualizar el despliegue de API.
- (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.
Edición de un archivo JSON para agregar backends de desconexión a una especificación de despliegue de API
Para agregar backends de desconexión a una especificación de despliegue de API en un archivo JSON:
-
Con su editor de JSON preferido, edite la especificación de despliegue de API existente a la que desea agregar un backend de desconexión o cree una nueva especificación de despliegue de API (consulte Creación de una especificación de despliegue de API).
Por ejemplo, la siguiente especificación de despliegue básico de API define una función sencilla de Hello World sin servidor en Oracle Functions como un único backend:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
En la sección
routes
, incluya una nueva sección para un backend de desconexión:{ "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>" } } ] }
donde:
-
<logout-route-path>
especifica una ruta de acceso para las llamadas que utilizan los métodos mostrados para el backend de desconexión. Tenga en cuenta que la ruta de acceso especificada:- Es relativa al prefijo de ruta de acceso de despliegue (consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API).
- Debe estar precedida de una barra inclinada (/) y puede ser simplemente esa barra inclinada.
- Puede contener varias barras inclinadas (siempre que no sean adyacentes) y puede terminar con una barra inclinada.
- Puede incluir caracteres alfanuméricos en mayúscula y minúscula.
- Puede incluir los caracteres especiales
$ - _ . + ! * ' ( ) , % ; : @ & =
. -
Puede incluir parámetros y comodines (consulte Agregación de parámetros de ruta y comodines a rutas de acceso).
<method-list>
especifica uno o más métodos aceptados por el backend de desconexión, separados por comas. En el caso de los backends de desconexión, solo se aceptaGET
."type": "OAUTH2_LOGOUT"
especifica que el backend es un backend de desconexión.-
"allowedPostLogoutUris": ["<url>", "<url>"]
especifica opcionalmente una lista de una o más URL permitidas a las que se puede redirigir una solicitud de desconexión para revocar tokens. Las URL de la lista pueden ser rutas absolutas o relativas, y las URL pueden incluir variables de contexto. Por ejemplo,["https://${request.header[tenant-id].page.html}", "https://fixed-path.page.html",
."/logout_html"
]Tenga en cuenta que:
- Una URL posterior a la desconexión se puede incluir en una solicitud al backend de desconexión como valor de un parámetro de consulta denominado
postLogoutUrl
. - Si especifica una ruta de acceso relativa (es decir, a otra ruta del despliegue de API), tanto el despliegue de API como la ruta deben permitir el acceso anónimo.
- Si no incluye explícitamente una o más URL en la lista, se permite cualquier URL posterior a la desconexión.
- Una URL posterior a la desconexión se puede incluir en una solicitud al backend de desconexión como valor de un parámetro de consulta denominado
-
"postLogoutState": "<logout-data>"
especifica opcionalmente los datos que se transferirán cuando se redirija una solicitud de desconexión a un punto final de sesión final y/o una URL posterior a la desconexión. Los datos solo pueden incluir variables de contexto (no valores estáticos). Por ejemplo,request.query[region]
Los datos se transfieren como valor del parámetro de consulta
state
.
En este ejemplo, una solicitud al backend
/logout
puede incluir una de las URL especificadas paraallowedPostLogoutUris
como valor del parámetro de consultapostLogoutUrl
. Cuando se llama a la URL posterior a la desconexión, el valor de la variable de contextorequest.query[region]
se transfiere a la URL. Tenga en cuenta que en este ejemplo, uno de los valoresallowedPostLogoutUris
("/logout_html"
) es una ruta de acceso relativa al backend de respuesta de stock/logout_html
en el mismo despliegue de API. Puesto que es una ruta de acceso relativa a otra ruta en el mismo despliegue de API, el backend/logout_html
debe incluir una política de autorización de tipoANONYMOUS
, como se muestra aquí.{ "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" } } } ] }
-
- Guarde el archivo JSON que contiene la especificación de despliegue de API.
-
Utilice la especificación de despliegue de API al crear o actualizar un despliegue de API de las siguientes formas:
- Especificando el archivo JSON en la consola al seleccionar la opción Cargar API.
- Especificando el archivo JSON en una solicitud para la API REST de gateway de API.
Para obtener más información, consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API y Actualización de un gateway de API.
- (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.