Extensión de autenticación de Google

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Versión: 1.3.1

Autentícate con Google para acceder 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, mediante una política ServiceHighlight.

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

Requisitos previos

En este contenido, se proporciona referencia para configurar y usar la extensión. Antes de utilizar la extensión desde un proxy de API con la política ExtensionExtension, 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 a fin de generar una clave para la cuenta de servicio.

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

Acerca de la autenticación con Google Cloud

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

Por lo tanto, la extensión solo podrá acceder a los recursos para los que el miembro tenga permiso. En otras palabras, la autenticación correcta por parte de esta extensión depende de una coincidencia entre los permisos otorgados en la consola de Google Cloud y el acceso que solicita la extensión (a través de permisos o público) en el tiempo de ejecución.

Por lo 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 ExtensionExtension a fin de usar esta extensión, solicita la autenticación solo para los recursos a los que tiene acceso el miembro de tu proyecto.

Ejemplos

En los siguientes ejemplos, se muestra cómo autenticar con Google Cloud mediante la política ExtensionExtension.

Obtén un token de acceso

En el siguiente ejemplo, la acción getOauth2AccessToken de la extensión recupera un token para usar en las 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 respuesta será similar al siguiente:

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

La siguiente política deAssignMessage recupera el valor de respuesta de la política ExtensionExtension anterior 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>

Cómo almacenar en caché un token de acceso

A fin de evitar hacer 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 uno 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 es para 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 ya se obtuvo el token y este se almacenó en caché, esta política lo obtendrá 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 de la caché no recupera un token almacenado en caché, la siguiente política ExtensionExtension recupera un token de OAuth nuevo y especifica la API de Google Cloud Translation como el alcance del token. Google Cloud muestra 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 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 ExtensionExtension recupera un token nuevo, la política PropagaCache 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 requieran un token de OAuth.

En OAuth de dos segmentos, esta acción de extensión recupera un token de OAuth mediante la autenticación con Google mediante el uso de un JSON de cuenta de servicio (lo agregas cuando configuras esta extensión). Una vez que esta acción recupera el token de OAuth, el proxy de API puede usar el token para realizar llamadas a las API de Google y llamar de forma efectiva a las API 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 enumerados en los permisos de OAuth 2.0 para las APIs de Google.

Para 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 usar en las 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 Predeterminada Obligatorias
permiso Un array de permisos de OAuth 2.0. Si quieres 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 No.

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 las respuestas

Parámetro Descripción Predeterminada Obligatorias
accessToken Es el token de acceso de OAuth 2.0. Ninguna
tokenType Tipo de token. Portador
expiresInSec Cantidad de segundos que faltan para el vencimiento del token. 3,600

getJWTAccessToken

Obtiene un token de acceso de token web JSON (JWT). Puedes usar este token para autenticar 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 API de Google, puedes realizar llamadas a la API autorizadas con un JWT firmado directamente como un token del portador, en vez 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.

Para obtener más información sobre la autenticación con un token de acceso JWT, consulta Usa 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 usar en las 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 usar en las 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 Predeterminada Obligatorias
audience Destinatario objetivo del token. Esto puede incluir un ID de cliente protegido por Cloud IAP, una URL de Cloud Functions, etcétera. Ninguna

Respuesta

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

Propiedades de las respuestas

Parámetro Descripción Predeterminada Obligatorias
accessToken Token de acceso. Ninguna
tokenType Tipo de token. Portador
expiresInSec Vence en segundos. 3,600

Referencia de la configuración

Usa la siguiente información cuando configures e implementes esta extensión para usarla en proxies de API. Si quieres conocer los pasos para configurar una extensión con la consola de Apigee, consulta Agrega y configura 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 Predeterminada Obligatorias
credenciales Cuando se ingresa en la consola de Apigee Edge, este es el contenido completo de tu archivo JSON de claves de la cuenta de servicio. Cuando se envía a través de la API de Management, es un valor codificado en base64 que se genera a partir de todo el archivo JSON de clave de cuenta de servicio. Ninguna