Estás viendo la documentación de Apigee Edge.
Ve a la
documentación de Apigee X. info
Versión: 2.0.0
Realiza la autenticación 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, 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, pasarlo 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 una 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:
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.
Usa la consola de Google Cloud para generar una clave para la cuenta de servicio.
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 la autenticación de Google Cloud representando un miembro específico definido en tu proyecto de Google Cloud. Cuando configures esta extensión, usarás el archivo JSON de la cuenta de servicio de ese miembro del proyecto.
Como resultado, esta extensión solo tendrá acceso a los recursos para los que ese miembro tenga permiso. En otras palabras, la autenticación correcta 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 alcances o públicos) durante 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:
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 Identity and Access Management (IAM) de Cloud en la consola de Google Cloud para otorgar roles al miembro del proyecto que representa esta extensión.
Usa el JSON de la clave de la cuenta de servicio de ese miembro cuando configures esta extensión.
Cuando configures una política de ExtensionCallout para usar esta extensión, solicita la autenticación solo para los recursos a los que el miembro de tu proyecto tenga acceso.
Ejemplos
En los siguientes ejemplos, se muestra cómo autenticarse con Google Cloud mediante 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 la respuesta de la política de ExtensionCallout 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
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 uno nuevo. Cuando venza el token almacenado en caché, recupera uno nuevo y actualiza la caché con él.
En el siguiente código de un proxy de API de ejemplo, se muestra cómo configurar y usar un token almacenado en caché para llamar a la API de Google Translate con una política ServiceCallout. Cada ejemplo de código aquí es para una política diferente en el flujo.
Las siguientes políticas se ejecutan en la secuencia que se describe en el siguiente flujo 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 el token ya se obtuvo y 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 la caché no recupera un token almacenado en caché, la siguiente política ExtensionCallout recupera un nuevo token de OAuth 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 usan cuando se configura 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 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 pasos entre tu proxy de API y las APIs de Google cuando estas requieran un token de OAuth.
En OAuth de dos pasos, esta acción de la extensión recupera un token de OAuth mediante la autenticación con Google con un JSON de cuenta de servicio (agregas ese JSON cuando configuras esta extensión). Una vez que esta acción recupera el token de OAuth, tu proxy de API puede usar el token para realizar llamadas a las APIs de Google, lo que, en efecto, llama 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 Alcances 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 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 | Predeterminado | Obligatorio |
---|---|---|---|---|
alcance | Un array de permisos de OAuth 2.0. Para 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 en el siguiente formato:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Propiedades de la respuesta
Parámetro | Descripción | Predeterminada | Obligatorio |
---|---|---|---|
accessToken | Es el token de acceso de OAuth 2.0. | Ninguno | Sí |
tokenType | Tipo de token. | Portador | Sí |
expiresInSec | Es la cantidad de segundos hasta que vence el token. | 3600 | Sí |
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 a la API autorizadas con un JWT firmado directamente como un token del portador, en lugar de un token de acceso de OAuth 2.0. Cuando esto sea 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 cómo autenticar 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 | Predeterminada | Obligatorio |
---|---|---|---|
audience | Es el destinatario previsto del token. Esto puede incluir un ID de cliente protegido por Cloud IAP, una URL de Cloud Functions, etcétera. | Ninguno | Sí |
Respuesta
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Propiedades de la respuesta
Parámetro | Descripción | Predeterminada | Obligatorio |
---|---|---|---|
accessToken | Token de acceso | Ninguno | Sí |
tokenType | Tipo de token. | Portador | Sí |
expiresInSec | Vencimiento en segundos. | 3600 | Sí |
Referencia de la configuración
Usa lo siguiente cuando configures y, luego, 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 la extensión
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 | Predeterminada | Obligatorio |
---|---|---|---|
credenciales | Cuando se ingresa en la consola de Apigee Edge, este es todo el contenido del archivo JSON de la clave de la 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 claves de la cuenta de servicio. | Ninguno | Sí |