Sie lesen gerade die Apigee Edge-Dokumentation.
Zur
Apigee X-Dokumentation. info
Version: 1.3.1
Authentifizieren Sie sich bei Google, um auf die von Ihnen angegebenen Google APIs zuzugreifen.
Mit dieser Erweiterung können Sie ein Token (OAuth oder JWT) für Google Cloud-Dienste abrufen und dann für nachfolgende Aufrufe der Google API verwenden, z. B. mit einer ServiceCallout-Richtlinie.
In einem API-Proxy können Sie beispielsweise mit dieser Erweiterung ein Token abrufen, es mit der PopulateCache-Richtlinie im Cache speichern und dann mit der ServiceCallout-Richtlinie übergeben, um aus einem API-Proxy-Ablauf auf Google Cloud-Dienste zuzugreifen.
Vorbereitung
Dieser Inhalt enthält eine Referenz zum Konfigurieren und Verwenden dieser Erweiterung. Bevor Sie die Erweiterung über einen API-Proxy mit der ExtensionCallout-Richtlinie verwenden, müssen Sie Folgendes tun:
Prüfen Sie, ob das Konto, das von der Erweiterung verwendet wird (das Konto, das durch das Dienstkonto dargestellt wird, das Sie für die Anmeldedaten verwenden), Zugriff auf die Google Cloud-Dienste hat, bei denen sich die Erweiterung authentifiziert.
Generieren Sie mit der Google Cloud Console einen Schlüssel für das Dienstkonto.
Verwenden Sie den Inhalt der resultierenden JSON-Datei des Dienstkontoschlüssels, wenn Sie die Erweiterung mit der Konfigurationsreferenz hinzufügen und konfigurieren.
Authentifizierung mit Google Cloud
Diese Erweiterung fordert die Authentifizierung von Google Cloud an, indem sie ein bestimmtes Mitglied darstellt, das in Ihrem Google Cloud-Projekt definiert ist. Sie verwenden die JSON-Datei des Dienstkontos dieses Projektmitglieds, wenn Sie diese Erweiterung konfigurieren.
Daher hat diese Erweiterung nur Zugriff auf die Ressourcen, für die dieses Mitglied eine Berechtigung hat. Mit anderen Worten: Eine erfolgreiche Authentifizierung durch diese Erweiterung hängt davon ab, ob die in der Google Cloud Console gewährten Berechtigungen mit dem von der Erweiterung zur Laufzeit angeforderten Zugriff (über Bereiche oder Zielgruppe) übereinstimmen.
Im Allgemeinen sind die Schritte zur Authentifizierung für den Zugriff auf APIs über diese Erweiterung die folgenden:
Prüfen Sie, ob das Dienstkonto des Mitglieds, das von dieser Erweiterung dargestellt wird, Zugriff auf die Google-Ressource hat, auf die Sie zugreifen möchten. Auf der Seite „Cloud Identity and Access Management“ (Cloud IAM) in der Google Cloud Console können Sie dem Projektmitglied, das von dieser Erweiterung dargestellt wird, Rollen zuweisen.
Verwenden Sie die JSON-Datei des Dienstkontoschlüssels dieses Mitglieds, wenn Sie diese Erweiterung konfigurieren.
Wenn Sie eine ExtensionCallout-Richtlinie für die Verwendung dieser Erweiterung konfigurieren, fordern Sie die Authentifizierung nur für Ressourcen an, auf die Ihr Projektmitglied Zugriff hat.
Beispiele
Die folgenden Beispiele veranschaulichen, wie Sie sich mit der ExtensionCallout-Richtlinie bei Google Cloud authentifizieren.
Zugriffstoken anfordern
Im folgenden Beispiel ruft die Aktion getOauth2AccessToken der Erweiterung ein Token ab, das in Anfragen an die Cloud Translation API verwendet werden kann.
<?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>
Der Antwortwert sieht in etwa so aus:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
Die folgende AssignMessage-Richtlinie ruft den Antwortwert aus der oben genannten ExtensionCallout-Richtlinie ab und kopiert ihn in die Antwortnutzlast. Das kann bei der Fehlerbehebung hilfreich sein. In der Praxis möchten Sie das Token möglicherweise nicht an den Client zurückgeben.
<?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>
Zugriffstoken im Cache speichern
Um unnötige Aufrufe zum Abrufen eines Tokens zu vermeiden, sollten Sie das empfangene Token im Cache speichern. Bei nachfolgenden Aufrufen, für die ein Token erforderlich ist, ist das Abrufen des Tokens aus dem Apigee Edge-Cache schneller als das Abrufen eines neuen Tokens. Wenn das im Cache gespeicherte Token abläuft, rufen Sie ein neues Token ab und aktualisieren Sie den Cache damit.
Der folgende Code aus einem Beispiel-API-Proxy veranschaulicht, wie Sie ein im Cache gespeichertes Token festlegen und verwenden, um die Google Translation API mit einer ServiceCallout-Richtlinie aufzurufen. Jedes Codebeispiel bezieht sich auf eine andere Richtlinie im Ablauf.
Die folgenden Richtlinien werden in der Reihenfolge ausgeführt, die im folgenden Ablauf-XML beschrieben ist:
<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>
Die folgende LookupCache-Richtlinie versucht, ein Token aus dem Cache abzurufen. Wenn das Token bereits abgerufen und im Cache gespeichert wurde, ruft diese Richtlinie es für die Verwendung durch den API-Proxy ab.
<?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>Wenn bei der Cache-Suche kein im Cache gespeichertes Token abgerufen wird, ruft die folgende ExtensionCallout-Richtlinie ein neues OAuth-Token ab und gibt die Google Cloud Translation API als Bereich für das Token an. Google Cloud gibt ein gültiges Token zurück, wenn die Anmeldedaten des Dienstkontos, die beim Konfigurieren der Erweiterung
Google-Auth-Calloutverwendet wurden, ein Projektmitglied darstellen, das Zugriff auf die API hat.<?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>Nachdem die ExtensionCallout-Richtlinie ein neues Token abgerufen hat, speichert die PopulateCache policy es im Cache, damit es später von Richtlinien im API-Proxy verwendet werden kann.
<?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>
Aktionen
getOauth2AccessToken
Ruft ein OAuth 2.0-Zugriffstoken ab. Verwenden Sie diese Aktion, um die zweibeinige OAuth-Authentifizierung zwischen Ihrem API-Proxy und Google APIs zu unterstützen, wenn für die Google APIs ein OAuth-Token erforderlich ist.
Bei der zweibeinigen OAuth-Authentifizierung ruft diese Erweiterungsaktion ein OAuth-Token ab, indem sie sich mit einem Dienstkonto-JSON bei Google authentifiziert. Sie fügen dieses JSON hinzu, wenn Sie diese Erweiterung konfigurieren. Sobald diese Aktion das OAuth-Token abruft, kann Ihr API-Proxy das Token verwenden, um Aufrufe an Google APIs zu senden. Die APIs werden also im Namen des Google-Dienstkontos aufgerufen.
Der Zugriff auf Google Cloud APIs wird über die in OAuth 2.0-Bereiche für Google APIs aufgeführten Bereiche gefiltert.
Weitere Informationen zu Server-zu-Server-Interaktionen mit OAuth 2.0 finden Sie unter OAuth 2.0 für Server-zu-Server-Anwendungen verwenden.
Syntax
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Beispiel
Im folgenden Beispiel ruft die Aktion getOauth2AccessToken der Erweiterung ein Token ab, das in Anfragen an die Cloud Translation API verwendet werden kann.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Anfrageparameter
| Parameter | Beschreibung | Typ | Standard | Erforderlich |
|---|---|---|---|---|
| Bereich | Ein Array von OAuth 2.0-Bereichen. Weitere Informationen zu Bereichen finden Sie unter OAuth 2.0-Bereiche für Google APIs. | Array | ["https://www.googleapis.com/auth/cloud-platform"], das Zugriff auf alle APIs gewährt, auf die das Dienstkonto Zugriff hat. |
Nein. |
Antwort
Ein Objekt mit dem Zugriffstoken, seinem Typ und seinem Ablaufdatum in folgendem Format:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Antwortattribute
| Parameter | Beschreibung | Standard | Erforderlich |
|---|---|---|---|
| accessToken | OAuth 2.0-Zugriffstoken. | Keine | Ja |
| tokenType | Tokentyp. | Bearer | Ja |
| expiresInSec | Anzahl der Sekunden bis zum Ablauf des Tokens. | 3600 | Ja |
getJWTAccessToken
Ruft ein Zugriffstoken für JSON Web Token (JWT) ab. Sie können dieses Token verwenden, um sich bei Google APIs zu authentifizieren, wenn für die API, die Sie aufrufen möchten, eine Dienstdefinition im Google APIs-GitHub-Repository veröffentlicht wurde.
Bei einigen Google APIs können Sie autorisierte API-Aufrufe mit einem signierten JWT direkt als Inhabertoken anstelle eines OAuth 2.0-Zugriffstokens ausführen. Wenn dies möglich ist, können Sie vermeiden, eine Netzwerkanfrage an den Autorisierungsserver von Google zu senden, bevor Sie einen API-Aufruf ausführen.
Weitere Informationen zur Authentifizierung mit einem JWT-Zugriffstoken finden Sie unter OAuth 2.0 für Server-zu-Server-Anwendungen verwenden.
Syntax
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Beispiel: Cloud Functions-URL
Im folgenden Beispiel ruft die Aktion getOauth2AccessToken der Erweiterung ein Token ab, das in Anfragen an die Cloud Translation API verwendet werden kann.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Beispiel: Mit Cloud IAP gesicherte Client-ID
Im folgenden Beispiel ruft die Aktion getOauth2AccessToken der Erweiterung ein Token ab, das in Anfragen an die Cloud Translation API verwendet werden kann.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Anfrageparameter
| Parameter | Beschreibung | Standard | Erforderlich |
|---|---|---|---|
| Zielgruppe | Beabsichtigter Empfänger des Tokens. Dazu können eine mit Cloud IAP gesicherte Client-ID, eine Cloud Functions-URL usw. gehören. | Keine | Ja |
Antwort
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Antwortattribute
| Parameter | Beschreibung | Standard | Erforderlich |
|---|---|---|---|
| accessToken | Zugriffstoken. | Keine | Ja |
| tokenType | Tokentyp. | Bearer | Ja |
| expiresInSec | Ablauf in Sekunden. | 3600 | Ja |
Konfigurationsreferenz
Verwenden Sie die folgenden Informationen, wenn Sie diese Erweiterung für die Verwendung in API-Proxys konfigurieren und bereitstellen. Eine Anleitung zum Konfigurieren einer Erweiterung mit der Apigee-Konsole finden Sie unter Erweiterung hinzufügen und konfigurieren.
Allgemeine Erweiterungseigenschaften
Für jede Erweiterung sind die folgenden Eigenschaften vorhanden.
| Attribut | Beschreibung | Standard | Erforderlich |
|---|---|---|---|
name |
Der Name, den Sie dieser Konfiguration der Erweiterung zuweisen. | – | Ja |
packageName |
Name des Erweiterungspakets, wie von Apigee Edge angegeben. | – | Ja |
version |
Versionsnummer für das Erweiterungspaket, von dem Sie eine Erweiterung konfigurieren. | – | Ja |
configuration |
Konfigurationswert speziell für die Erweiterung, die Sie hinzufügen. Weitere Informationen finden Sie unter Eigenschaften für dieses Erweiterungspaket. | – | Ja |
Eigenschaften für dieses Erweiterungspaket
Geben Sie Werte für die folgenden Konfigurationseigenschaften an, die speziell für diese Erweiterung gelten.
| Attribut | Beschreibung | Standard | Erforderlich |
|---|---|---|---|
| Anmeldedaten | Wenn in der Apigee Edge-Konsole eingegeben, ist dies der gesamte Inhalt der JSON-Datei des Dienstkontoschlüssels. Wenn über die Management API gesendet, ist es ein base64-codierter Wert, der aus der gesamten JSON-Datei des Dienstkontoschlüssels generiert wurde. | Keine | Ja |