Extensión de autenticación de Google

Estás viendo la documentación de Apigee Edge.
Ve a 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 con el objetivo de obtener un token (OAuth o JWT) para los servicios de Google Cloud y, luego, úsalo para las llamadas posteriores a la API de Google, por ejemplo, con una política ServiceTexto destacado.

Por ejemplo, en un proxy de API, puedes obtener un token con esta extensión, almacenar en caché el token con la política CompleteCache y, luego, pasar el token a través de 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 referencia para configurar y usar esta extensión. Antes de utilizar la extensión desde un proxy de API con la política ExtensionReference, debes hacer lo siguiente:

  1. Asegúrate de que la cuenta que utilizará la extensión (la que representa 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 con la referencia de configuración.

Acerca de la autenticación con Google Cloud

Esta extensión solicita autenticación de Google Cloud a través de la representación de 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.

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 la 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 entorno de ejecución.

En general, los pasos para autenticarte y acceder 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 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 ExtensionReference para usar esta extensión, solicita la autenticación solo para los recursos a los que tiene acceso un miembro de tu proyecto.

Ejemplos

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

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 respuesta debería ser similar al siguiente:

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

Con la siguiente política AssignMessage, se recupera el valor de respuesta de la política ExtensionReference anterior y se copia en la carga útil de la respuesta. Esto puede ser útil para la depuración. En la práctica, es posible que no desees 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

Para evitar hacer llamadas innecesarias para recuperar un token, considera almacenar en caché el token que recibes. Para las llamadas posteriores que requieran un token, la recuperación de este desde la caché de Apigee Edge será más rápida que obtener un token nuevo. Cuando venza el token almacenado en caché, recupera un token nuevo y actualízalo en la caché.

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 descrita en el siguiente flujo de XML:

  <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 LookupCache intenta obtener un token de la caché. Si ya se obtuvo el token y 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 en caché no recupera un token almacenado en caché, la siguiente política ExtensionReference 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 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 ExtensionExtension recupera un token nuevo, la política CompleteCache lo almacena en caché para que lo usen más adelante las políticas del proxy de API.

      <?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 las APIs de Google requieran un token de OAuth.

En OAuth de dos segmentos, esta acción de extensión recupera un token de OAuth a través de la autenticación con Google mediante una cuenta de servicio JSON (debes agregar ese JSON cuando configuras esta extensión). Una vez que esta acción recupera el token de OAuth, el proxy de tu API puede usar el token para realizar llamadas a las APIs de Google y llamar de manera efectiva 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 enumerados en los 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 Cómo usar 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 Predeterminada Obligatorio
alcance Una matriz de alcances de OAuth 2.0. Si deseas obtener más información sobre los alcances, consulta los alcances de OAuth 2.0 para las APIs de Google. Arreglo ["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 la respuesta

Parámetro Descripción Predeterminado Obligatorio
accessToken Es el token de acceso de OAuth 2.0. Ninguno
tokenType Tipo de token. Portador
expiresInSec Cantidad de segundos que faltan para que caduque el token. 3600

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 que quieres llamar tiene una definición del 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 token del portador, en lugar de un token de acceso de OAuth 2.0. Cuando esto sea posible, evita 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 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 Destinatario previsto del token. Esto puede incluir un ID de cliente protegido por Cloud IAP, una URL de Cloud Functions, entre otros. 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. Portador
expiresInSec Vence 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 quieres conocer los pasos para configurar una extensión con la consola de Apigee, consulta Agrega y configura una extensión.

Propiedades de extensión comunes

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 claves de su 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 JSON de la clave de la cuenta de servicio. Ninguno