Vous consultez la documentation Apigee Edge.
Accédez à la
documentation**Apigee X**. info
Version: 2.0.0
Authentifiez-vous auprès de Google pour accéder aux API Google que vous spécifiez.
Utilisez cette extension pour obtenir un jeton (OAuth ou JWT) pour les services Google Cloud, puis utilisez-le pour les appels ultérieurs à l'API Google, par exemple à l'aide d'une règle ServiceCallout.
Par exemple, dans un proxy d'API, vous pouvez obtenir un jeton avec cette extension, le mettre en cache à l'aide de la règle PopulateCache, puis le transmettre à l'aide de la règle ServiceCallout pour accéder aux services Google Cloud à partir d'un flux de proxy d'API.
Prérequis
Ce contenu fournit des informations de référence pour configurer et utiliser cette extension. Avant d'utiliser l'extension à partir d'un proxy d'API à l'aide de la règle ExtensionCallout, vous devez effectuer les opérations suivantes :
Assurez-vous que le compte que l'extension utilisera (le compte représenté par le compte de service que vous utiliserez pour les identifiants) a accès aux services Google Cloud avec lesquels l'extension s'authentifiera.
Utilisez la console Google Cloud pour générer une clé pour le compte de service.
Utilisez le contenu du fichier JSON de clé de compte de service obtenu lorsque vous ajoutez et configurez l'extension à l'aide de la documentation de référence sur la configuration.
À propos de l'authentification avec Google Cloud
Cette extension demande l'authentification auprès de Google Cloud en représentant un membre spécifique défini dans votre projet Google Cloud. Vous utilisez le fichier JSON du compte de service de ce membre de projet lorsque vous configurez cette extension.
Par conséquent, cette extension n'aura accès qu'aux ressources pour lesquelles ce membre dispose d'une autorisation. En d'autres termes, l'authentification réussie par cette extension dépend d'une correspondance entre les autorisations accordées dans la console Google Cloud et l'accès demandé par l'extension (via des champs d'application ou une audience) au moment de l'exécution.
En règle générale, les étapes d'authentification pour accéder aux API à partir de cette extension sont les suivantes :
Assurez-vous que le compte de service membre que cette extension représente a accès à la ressource Google à laquelle vous souhaitez accéder. Vous pouvez utiliser la page Cloud Identity and Access Management (Cloud IAM) de la console Google Cloud pour attribuer des rôles au membre de projet que cette extension représente.
Utilisez la clé JSON du compte de service de ce membre lorsque vous configurez cette extension.
Lorsque vous configurez une règle ExtensionCallout pour utiliser cette extension, ne demandez l'authentification que pour les ressources auxquelles votre membre de projet a accès.
Exemples
Les exemples suivants illustrent comment s'authentifier auprès de Google Cloud à l'aide de la règle ExtensionCallout.
Obtenir un jeton d'accès
Dans l'exemple suivant, l'action getOauth2AccessToken de l'extension récupère un jeton à utiliser dans les requêtes adressées à l'API 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>
La valeur de la réponse se présente comme suit :
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
La règle AssignMessage suivante récupère la valeur de la réponse à partir de la règle ExtensionCallout et la copie dans la charge utile de la réponse. Cela peut être utile pour le débogage. En pratique, vous ne voudrez peut-être pas renvoyer le jeton au client.
<?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>
Mettre en cache un jeton d'accès
Pour éviter d'effectuer des appels inutiles afin de récupérer un jeton, envisagez de mettre en cache le jeton que vous recevez. Pour les appels ultérieurs nécessitant un jeton, la récupération du jeton à partir du cache Apigee Edge sera plus rapide que l'obtention d'un nouveau jeton. Lorsque le jeton mis en cache expire, récupérez-en un nouveau et actualisez le cache avec celui-ci.
Le code suivant d'un exemple de proxy d'API illustre comment définir et utiliser un jeton mis en cache pour appeler l'API Google Translation avec une règle ServiceCallout. Chaque exemple de code correspond à une règle différente dans le flux.
Les règles suivantes sont exécutées dans la séquence décrite par le code XML de flux suivant :
<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 règle LookupCache suivante tente d'obtenir un jeton à partir du cache. Si le jeton a déjà été obtenu et mis en cache, cette règle l'obtient pour qu'il soit utilisé par le proxy d'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 recherche dans le cache ne récupère pas de jeton mis en cache, la règle ExtensionCallout suivante récupère un nouveau jeton OAuth, en spécifiant l'API Google Cloud Translation comme champ d'application du jeton. Google Cloud renvoie un jeton valide si les identifiants du compte de service utilisés lors de la configuration de l'extension
Google-Auth-Calloutreprésentent un membre de projet qui a accès à l'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>Une fois que la règle ExtensionCallout a récupéré un nouveau jeton, la règle PopulateCache le met en cache pour une utilisation ultérieure par les règles du proxy d'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>
Actions
getOauth2AccessToken
Obtient un jeton d'accès OAuth 2.0. Utilisez cette action pour prendre en charge l'authentification OAuth à deux acteurs entre votre proxy d'API et les API Google lorsque les API Google nécessitent un jeton OAuth.
Dans l'authentification OAuth à deux acteurs, cette action d'extension récupère un jeton OAuth en s'authentifiant auprès de Google à l'aide d'un fichier JSON de compte de service (que vous ajoutez lorsque vous configurez cette extension). Une fois que cette action a récupéré le jeton OAuth, votre proxy d'API peut l'utiliser pour effectuer des appels aux API Google, en appelant effectivement les API au nom du compte de service Google.
L'accès aux API Google Cloud est filtré par les niveaux d'accès listés dans Niveaux d'accès OAuth 2.0 pour les Google APIs.
Pour en savoir plus sur les interactions serveur à serveur avec OAuth 2.0, consultez Utiliser OAuth 2.0 pour les applications serveur à serveur.
Syntaxe
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Exemple
Dans l'exemple suivant, l'action getOauth2AccessToken de l'extension récupère un jeton à utiliser dans les requêtes adressées à l'API Cloud Translation.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Paramètres de requête
| Paramètre | Description | Type | Valeur par défaut | Obligatoire |
|---|---|---|---|---|
| champ d'application | Tableau de champs d'application OAuth 2.0. Pour en savoir plus sur les champs d'application, consultez Champs d'application OAuth 2.0 pour les API Google. | Tableau | ["https://www.googleapis.com/auth/cloud-platform"], qui accorde l'accès à toutes les API auxquelles le compte de service a accès. |
Non. |
Réponse
Objet contenant le jeton d'accès, son type et sa date d'expiration au format suivant :
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Propriétés de réponse
| Paramètre | Description | Valeur par défaut | Obligatoire |
|---|---|---|---|
| accessToken | Jeton d'accès OAuth 2.0. | Aucun | Oui |
| tokenType | Type de jeton. | Bearer | Oui |
| expiresInSec | Nombre de secondes avant l'expiration du jeton. | 3600 | Oui |
getJWTAccessToken
Obtient un jeton d'accès JWT (JSON Web Token). Vous pouvez utiliser ce jeton pour vous authentifier auprès des Google APIs si l'API que vous souhaitez appeler dispose d'une définition de service publiée dans le dépôt GitHub des Google APIs.
Avec certaines API Google, vous pouvez effectuer des appels d'API autorisés à l'aide d'un jeton JWT signé directement en tant que jeton de support, plutôt qu'un jeton d'accès OAuth 2.0. Lorsque cela est possible, vous pouvez éviter d'avoir à envoyer une requête réseau au serveur d'autorisation de Google avant d'effectuer un appel d'API.
Pour en savoir plus sur l'authentification avec un jeton d'accès JWT, consultez Utiliser OAuth 2.0 pour les applications serveur à serveur.
Syntaxe
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Exemple : URL de fonction Cloud
Dans l'exemple suivant, l'action getOauth2AccessToken de l'extension récupère un jeton à utiliser dans les requêtes adressées à l'API Cloud Translation.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Exemple : ID client sécurisé par Cloud IAP
Dans l'exemple suivant, l'action getOauth2AccessToken de l'extension récupère un jeton à utiliser dans les requêtes adressées à l'API Cloud Translation.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Paramètres de requête
| Paramètre | Description | Valeur par défaut | Obligatoire |
|---|---|---|---|
| audience | Destinataire prévu du jeton. Cela peut inclure un ID client sécurisé par Cloud IAP ou une URL de fonction Cloud. | Aucun | Oui |
Réponse
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Propriétés de réponse
| Paramètre | Description | Valeur par défaut | Obligatoire |
|---|---|---|---|
| accessToken | Jeton d'accès. | Aucun | Oui |
| tokenType | Type de jeton. | Bearer | Oui |
| expiresInSec | Expiration en secondes. | 3600 | Oui |
Documentation de référence sur la configuration
Utilisez les informations suivantes lorsque vous configurez et déployez cette extension pour l'utiliser dans des proxys d'API. Pour savoir comment configurer une extension à l'aide de la console Apigee, consultez Ajouter et configurer une extension.
Propriétés d'extension communes
Les propriétés suivantes sont présentes pour chaque extension.
| Propriété | Description | Par défaut | Obligatoire |
|---|---|---|---|
name |
Nom que vous attribuez à cette configuration de l'extension. | Aucune | Oui |
packageName |
Nom du package d'extension tel qu'indiqué par Apigee Edge. | Aucune | Oui |
version |
Numéro de version du package d'extension à partir duquel vous configurez une extension. | Aucune | Oui |
configuration |
Valeur de configuration spécifique à l'extension que vous ajoutez. Consultez Propriétés de ce package d'extension. | Aucune | Oui |
Propriétés de ce package d'extension
Spécifiez des valeurs pour les propriétés de configuration suivantes, spécifiques à cette extension.
| Propriété | Description | Valeur par défaut | Obligatoire |
|---|---|---|---|
| identifiants | Lorsqu'ils sont saisis dans la console Apigee Edge, il s'agit de l'intégralité du contenu de votre fichier JSON de clé de compte de service. Lorsqu'elle est envoyée à l'aide de l'API de gestion, il s'agit d'une valeur encodée en base64 générée à partir de l'intégralité du fichier JSON de clé de compte de service. | Aucun | Oui |