Estás viendo la documentación de Apigee Edge.
Ve a la
Documentación de Apigee X. información
Versión: 1.0.2
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:
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.
Usa la consola de Google Cloud a fin de generar una clave para la cuenta de servicio.
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:
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.
Usa la clave JSON de la cuenta de servicio de ese miembro cuando configures esta extensión.
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>
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>
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>
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 | Sí |
tokenType | Tipo de token. | Portador | Sí |
expiresInSec | Cantidad de segundos que faltan para que caduque el token. | 3600 | Sí |
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 | Sí |
Respuesta
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Propiedades de la respuesta
Parámetro | Descripción | Predeterminado | Obligatorio |
---|---|---|---|
accessToken | Token de acceso. | Ninguno | Sí |
tokenType | Tipo de token. | Portador | Sí |
expiresInSec | Vence en segundos. | 3600 | Sí |
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 Cómo agregar y configurar 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 | Sí |
packageName |
Nombre del paquete de extensiones proporcionado por Apigee Edge. | Ninguna | Sí |
version |
El número de versión del paquete de extensiones desde el que quieres configurar la extensión. | Ninguna | Sí |
configuration |
Es un valor de configuración específico para la extensión que agregas. Consulta Propiedades para este paquete de extensiones | Ninguna | Sí |
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 | Sí |