Extensión de autenticación de Google

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Versión: 2.0.2

Autentícate con Google para obtener acceso a las APIs de Google que especifiques.

Usa esta extensión para obtener un token (OAuth o JWT) para los servicios de Google Cloud y, luego, usa el token para las llamadas posteriores a la API de Google, por ejemplo, con una política ServiceCallout.

Por ejemplo, en un proxy de API, puedes obtener un token con esta extensión, almacenarlo en caché con la política PopulateCache y, luego, pasar el token con la política ServiceCallout para acceder a los servicios de Google Cloud desde un flujo de proxy de API.

Requisitos previos

En este contenido, se proporciona información de referencia para configurar y usar esta extensión. Antes de usar la extensión desde un proxy de API con la política ExtensionCallout, debes hacer lo siguiente:

  1. Asegúrate de que la cuenta que usará la extensión (la cuenta representada por la cuenta de servicio que usarás para las credenciales) tenga acceso a los servicios de Google Cloud con los que se autenticará la extensión.

  2. Usa la consola de Google Cloud para generar una clave para la cuenta de servicio.

  3. Usa el contenido del archivo JSON de la clave de la cuenta de servicio resultante cuando agregues y configures la extensión con la referencia de configuración.

Acerca de la autenticación con Google Cloud

Esta extensión solicita autenticación de Google Cloud representando a un miembro específico definido en tu proyecto de Google Cloud. Usarás el archivo JSON de la cuenta de servicio de ese miembro del proyecto cuando configures esta extensión.

Como resultado, esta extensión solo tendrá acceso a los recursos para los que ese miembro tenga permiso. En otras palabras, la autenticación exitosa de esta extensión depende de una coincidencia entre los permisos otorgados en la consola de Google Cloud y el acceso solicitado por la extensión (a través de los permisos o el público) durante el tiempo de ejecución.

En general, los pasos para autenticar el acceso a las APIs desde esta extensión serán los siguientes:

  1. Asegúrate de que la cuenta de servicio de miembro que representa esta extensión tenga acceso al recurso de Google al que deseas acceder. Puedes usar la página de Cloud Identity and Access Management (Cloud IAM) en la consola de Google Cloud para otorgar roles al miembro del proyecto que representa esta extensión.

  2. Usa la clave JSON de la cuenta de servicio de ese miembro cuando configures esta extensión.

  3. Cuando configures una política de ExtensionCallout para usar esta extensión, solicita la autenticación solo para los recursos a los que tenga acceso el miembro de tu proyecto.

Ejemplos

En los siguientes ejemplos, se ilustra cómo autenticarse en Google Cloud con la política ExtensionCallout.

Obtén un token de acceso

En el siguiente ejemplo, la acción getOauth2AccessToken de la extensión recupera un token para usarlo en solicitudes a la API de Cloud Translation.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-Access-Token">
    <DisplayName>Get Access Token</DisplayName>
    <Connector>google-auth</Connector>
    <Action>getOauth2AccessToken</Action>
    <Input><![CDATA[{
      "scope" : [
        "https://www.googleapis.com/auth/cloud-translation"
      ]
    }]]></Input>
    <Output>google.credentials</Output>
</ConnectorCallout>

El valor de la respuesta se ve de la siguiente manera:

{
  "access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
  "token_type":"Bearer",
  "expiresInSec": 3600
}

La siguiente política de AssignMessage recupera el valor de respuesta de la política de ExtensionCallout y lo copia en la carga útil de la respuesta. Esto puede ser útil para la depuración. En la práctica, es posible que no quieras devolver el token al cliente.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Retrieve-Auth-Token">
    <DisplayName>Retrieve Auth Token</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{google.credentials.access_token}</Payload>
    </Set>
</AssignMessage>

Almacena en caché un token de acceso

Para evitar realizar llamadas innecesarias para recuperar un token, considera almacenar en caché el token que recibes. Para las llamadas posteriores que requieran un token, recuperar el token de la caché de Apigee Edge será más rápido que obtener un token nuevo. Cuando venza el token almacenado en caché, recupera un token nuevo y actualiza la caché con él.

El siguiente código de un proxy de API de ejemplo ilustra cómo configurar y usar un token almacenado en caché para llamar a la API de Google Translation con una política ServiceCallout. Cada ejemplo de código que se muestra aquí corresponde a una política diferente en el flujo.

Las siguientes políticas se ejecutan en la secuencia que se describe en el siguiente XML de flujo:

  <Request>
    <!-- Attempt to get a token from the cache. -->
    <Step>
        <Name>Get-Cached-Auth-Token</Name>
    </Step>
    <!-- Only execute the following ExtensionCallout policy if the call to the
      cache couldn't retrieve a cached token. -->
    <Step>
        <Name>Google-Auth-Callout</Name>
        <Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
    </Step>
    <!-- Only execute the following PopulateCache policy if the call to the
      cache couldn't retrieve a cached token. -->
    <Step>
        <Name>Cache-Auth-Token</Name>
        <Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
    </Step>
    <!-- Use the ServiceCallout policy to call the translate API. -->
    <Step>
        <Name>Translate-Text</Name>
    </Step>
</Request>
  1. La siguiente política de LookupCache intenta obtener un token de la caché. Si el token ya se obtuvo y se almacenó en caché, esta política lo recuperará para que lo use el proxy de API.

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <LookupCache async="false" continueOnError="false" enabled="true" name="Get-Cached-Auth-Token">
          <DisplayName>Get Cached Auth Token</DisplayName>
          <!-- Give cache key and scope to specify the entry for the cached token. -->
          <CacheKey>
              <Prefix/>
              <KeyFragment>gcp_translate_token_</KeyFragment>
          </CacheKey>
          <Scope>Exclusive</Scope>
          <!-- Assign the retrieved token (if any) to a variable, where it
           can be retrieved by policies. -->
          <AssignTo>cloud.translation.auth.token</AssignTo>
      </LookupCache>
    
  2. Si la búsqueda en caché no recupera un token almacenado en caché, la siguiente política de ExtensionCallout recupera un nuevo token de OAuth y especifica la API de Cloud Translation de Google como el alcance del token. Google Cloud devuelve un token válido si las credenciales de la cuenta de servicio que se usaron cuando se configuró la extensión Google-Auth-Callout representan a un miembro del proyecto que tiene acceso a la API.

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ConnectorCallout async="false" continueOnError="true" enabled="true" name="Google-Auth-Callout">
          <DisplayName>Google-Auth-Callout</DisplayName>
          <Connector>example-auth-extension</Connector>
          <Action>getOauth2AccessToken</Action>
          <Input><![CDATA[{
            "scope" : ["https://www.googleapis.com/auth/cloud-translation"]
          }]]></Input>
          <Output parsed="false">cloud.translation.auth.token</Output>
      </ConnectorCallout>
    
  3. Después de que la política ExtensionCallout recupera un token nuevo, la política PopulateCache lo almacena en caché para que las políticas del proxy de API lo usen más adelante.

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <PopulateCache async="false" continueOnError="false" enabled="true" name="Cache-Auth-Token">
          <DisplayName>Cache Auth Token</DisplayName>
          <Properties/>
          <!-- Set cache key information to specify a unique key for this entry. -->
          <CacheKey>
              <Prefix/>
              <KeyFragment>gcp_translate_token_</KeyFragment>
          </CacheKey>
          <Scope>Exclusive</Scope>
          <ExpirySettings>
              <TimeoutInSec>5</TimeoutInSec>
          </ExpirySettings>
          <!-- Get the token to cache from the variable where the ExtensionCallout put it. -->
          <Source>cloud.translation.auth.token</Source>
      </PopulateCache>
    

Acciones

getOauth2AccessToken

Obtiene un token de acceso de OAuth 2.0. Usa esta acción para admitir OAuth de dos segmentos entre tu proxy de API y las APIs de Google cuando estas últimas requieran un token de OAuth.

En OAuth de dos tramos, esta acción de extensión recupera un token de OAuth autenticándose con Google a través de un archivo JSON de cuenta de servicio (agregas ese archivo JSON cuando configuras esta extensión). Una vez que esta acción recupera el token de OAuth, tu proxy de API puede usarlo para realizar llamadas a las APIs de Google, lo que equivale a llamar a las APIs en nombre de la cuenta de servicio de Google.

El acceso a las APIs de Google Cloud se filtra a través de los permisos que se indican en Permisos de OAuth 2.0 para las APIs de Google.

Si deseas obtener más información sobre las interacciones de servidor a servidor con OAuth 2.0, consulta Usa OAuth 2.0 para aplicaciones de servidor a servidor.

Sintaxis

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
  "scope" : [
    "scope1",
    "scope2"
  ]
}]]></Input>

Ejemplo

En el siguiente ejemplo, la acción getOauth2AccessToken de la extensión recupera un token para usarlo en solicitudes a la API de Cloud Translation.

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-translation"
  ]
}]]></Input>

Parámetros de solicitud

Parámetro Descripción Tipo Predeterminado Obligatorio
alcance Es un array de permisos de OAuth 2.0. Si deseas obtener más información sobre los permisos, consulta Permisos de OAuth 2.0 para las APIs de Google. Array ["https://www.googleapis.com/auth/cloud-platform"], que otorga acceso a todas las APIs a las que tiene acceso la cuenta de servicio. Núm.

Respuesta

Un objeto que contiene el token de acceso, su tipo y su fecha de vencimiento con el siguiente formato:

{
  "accessToken": "ewogICJ0eXB...C5jb20iCn0K",
  "token_type": "Bearer",
  "expiresInSec": 3600
}

Propiedades de la respuesta

Parámetro Descripción Predeterminado Obligatorio
accessToken Es el token de acceso de OAuth 2.0. Ninguno
tokenType Tipo de token. Bearer
expiresInSec Cantidad de segundos hasta que vence el token. 3600

getJWTAccessToken

Obtiene un token de acceso de token web JSON (JWT). Puedes usar este token para autenticarte con las APIs de Google si la API a la que deseas llamar tiene una definición de servicio publicada en el repositorio de GitHub de las APIs de Google.

Con algunas APIs de Google, puedes realizar llamadas autorizadas a la API usando un JWT firmado directamente como un token del portador, en lugar de un token de acceso de OAuth 2.0. Cuando esto es posible, puedes evitar tener que realizar una solicitud de red al servidor de autorización de Google antes de realizar una llamada a la API.

Si deseas obtener más información para autenticarte con un token de acceso JWT, consulta Cómo usar OAuth 2.0 para aplicaciones de servidor a servidor.

Sintaxis

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

Ejemplo: URL de Cloud Function

En el siguiente ejemplo, la acción getOauth2AccessToken de la extensión recupera un token para usarlo en solicitudes a la API de Cloud Translation.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>

Ejemplo: ID de cliente protegido por Cloud IAP

En el siguiente ejemplo, la acción getOauth2AccessToken de la extensión recupera un token para usarlo en solicitudes a la API de Cloud Translation.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>

Parámetros de solicitud

Parámetro Descripción Predeterminado Obligatorio
audience Es el destinatario previsto del token. Esto puede incluir un ID de cliente protegido por Cloud IAP, una URL de Cloud Functions Ninguno

Respuesta

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

Propiedades de la respuesta

Parámetro Descripción Predeterminado Obligatorio
accessToken Token de acceso. Ninguno
tokenType Tipo de token. Bearer
expiresInSec Vencimiento en segundos. 3600

Referencia de la configuración

Usa la siguiente información cuando configures e implementes esta extensión para usarla en proxies de API. Si deseas conocer los pasos para configurar una extensión con la consola de Apigee, consulta Cómo agregar y configurar una extensión.

Propiedades comunes de las extensiones

Las siguientes propiedades están presentes para cada extensión.

Propiedad Descripción Predeterminado Obligatorio
name Nombre que asignas a esta configuración de la extensión. Ninguna
packageName Nombre del paquete de extensiones proporcionado por Apigee Edge. Ninguna
version El número de versión del paquete de extensiones desde el que quieres configurar la extensión. Ninguna
configuration Es un valor de configuración específico para la extensión que agregas. Consulta Propiedades para este paquete de extensiones Ninguna

Propiedades de este paquete de extensión

Especifica valores para las siguientes propiedades de configuración específicas de esta extensión.

Propiedad Descripción Predeterminado Obligatorio
credenciales Cuando se ingresa en la consola de Apigee Edge, este es todo el contenido del archivo JSON de la clave de tu cuenta de servicio. Cuando se envía a través de la API de administración, es un valor codificado en base64 que se genera a partir de todo el archivo de claves JSON de la cuenta de servicio. Ninguno