Usar Okta para autenticar usuarios

En esta página, se describe cómo admitir la autenticación de usuarios en API Gateway.

Para autenticar un usuario, una aplicación cliente debe enviar un token web JSON (JWT) en el encabezado de autorización de la solicitud HTTP a tu API de backend. API Gateway valida el token en nombre de la API, por lo que no es necesario agregar ningún código a la API para procesar la autenticación. Sin embargo, debes ajustar la configuración de la API para que la puerta de enlace sea compatible con los métodos de autenticación que elegiste.

API Gateway valida un JWT de forma eficaz con el JWT Conjunto de claves web JSON (JWKS) de la entidad emisora. La ubicación de la JWKS se especifica en el campo x-google-jwks_uri de la configuración de la API de la puerta de enlace. API Gateway almacena en caché los JWKS durante cinco minutos y los actualiza cada cinco minutos.

Antes de comenzar

  • Cuando tu aplicación cliente envía una solicitud HTTP, el encabezado de autorización en la solicitud debe contener las siguientes reclamaciones JWT:
    • iss (Emisor)
    • sub (Asunto)
    • aud (Público)
    • iat (Hora de emisión)
    • exp (Fecha y hora de vencimiento)

Configura API Gateway para admitir la autenticación de clientes

Debes tener un objeto de requisitos de seguridad y un objeto de definiciones de seguridad en la configuración de la API para API Gateway a fin de validar las reclamaciones en el JWT firmado.

Como se explica en la guía de integración de Okta para Google Cloud Endpoints, realiza los siguientes cambios en tu documento de OpenAPI:

  1. Agrega lo siguiente a la definición de seguridad en la configuración de tu API, que sigue el esquema de seguridad OpenAPI 2.0. Reemplaza YOUR_OKTA_TENANT_NAME con el nombre de tu instancia de Okta y YOUR_OKTA_CLIENT_ID con el ID de cliente que creaste en tu usuario de Okta.

          securityDefinitions:
            okta_jwt:
              authorizationUrl: ""
              flow: "implicit"
              type: "oauth2"
              x-google-issuer: "https://YOUR_OKTA_TENANT_NAME.com"
              x-google-jwks_uri: "https://YOUR_OKTA_TENANT_NAME.com/oauth2/v1/keys"
              x-google-audiences: "YOUR_OKTA_CLIENT_ID"
    
  2. Agrega una sección de seguridad en el nivel de la API para aplicarlo en su totalidad o en el nivel de los métodos y así aplicarla a un método específico.

      security:
        - okta_jwt: []
    

Puedes establecer varias definiciones de seguridad en la configuración de la API, pero cada definición debe tener una entidad emisora diferente. Si usas las secciones security a nivel de API y de los métodos, la configuración del nivel de los métodos anula la de la API.

El campo x-google-audiences no es obligatorio. API Gateway acepta todos los JWT con el nombre del servicio de backend, como https://SERVICE_NAME en la reclamación de aud.

Para permitir que otros IDs de cliente accedan al servicio de backend, puedes especificar el los IDs de cliente permitidos en el campo x-google-audiences usando valores separados por comas. Luego, API Gateway acepta los JWT con cualquiera de los ID de cliente especificados en la reclamación aud.

Realiza una llamada autenticada a una API de API Gateway

Cuando envías una solicitud con un token de autenticación, se recomienda colocar el token en el encabezado Authorization:Bearer. Por ejemplo:

curl --request POST \
  --header "Authorization: Bearer ${TOKEN}" \
  "${GATEWAY_URL}/echo"

Aquí, GATEWAY_URL y TOKEN son variables de entorno que contienen la URL de la puerta de enlace implementada y el token de autenticación, respectivamente. Consulta Haz una solicitud autenticada a una API de API Gateway para obtener código de muestra que envía una solicitud con el encabezado Authorization:Bearer.

Si no puedes usar el encabezado cuando envías la solicitud, puedes colocar el token de autenticación en un parámetro de consulta llamado access_token. Por ejemplo:

curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"

Recibe resultados autenticados en tu API

Por lo general, API Gateway reenvía todos los encabezados que recibe. Sin embargo, anula el encabezado original Authorization cuando la dirección de backend se especifique mediante x-google-backend en la configuración de la API.

API Gateway enviará el resultado de la autenticación en X-Apigateway-Api-Userinfo a la API de backend. Se recomienda usar este encabezado en lugar del encabezado Authorization original. Este encabezado está codificado en base64url y contiene la carga útil de JWT.

¿Qué sigue?