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:

  1. 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.

  2. 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.

  3. 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:

    • 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.
    • 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.

  4. (Opcional) Seleccione Another Route para introducir detalles de rutas adicionales.
  5. Seleccione Siguiente para revisar los detalles introducidos para el despliegue de API.
  6. Seleccione Crear o Guardar cambios para crear o actualizar el despliegue de API.
  7. (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: 

  1. 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"
          }
        }
      ]
    }
  2. 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:

    • <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 acepta GET.
    • "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.
    • "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 para allowedPostLogoutUris como valor del parámetro de consulta postLogoutUrl. Cuando se llama a la URL posterior a la desconexión, el valor de la variable de contexto request.query[region] se transfiere a la URL. Tenga en cuenta que en este ejemplo, uno de los valores allowedPostLogoutUris ("/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 tipo ANONYMOUS, 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"
            }
          }
        }
      ]
    }
  3. Guarde el archivo JSON que contiene la especificación de despliegue de API.
  4. 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.

  5. (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.