Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X info
Version: 2.0.1
Authentifizieren Sie sich bei Google, um Zugriff auf die von Ihnen angegebenen Google APIs zu erhalten.
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 ein Token mit dieser Erweiterung abrufen, das Token mit der PopulateCache-Richtlinie im Cache speichern und das Token dann über die ServiceCallout-Richtlinie übergeben, um über einen 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 können, müssen Sie Folgendes tun:
Achten Sie darauf, dass das Konto, das von der Erweiterung verwendet wird (das Konto, das durch das Dienstkonto repräsentiert wird, das Sie für Anmeldedaten verwenden), Zugriff auf die Google Cloud-Dienste hat, bei denen sich die Erweiterung authentifiziert.
Schlüssel für das Dienstkonto mit der Google Cloud Console generieren
Verwenden Sie den Inhalt der resultierenden JSON-Datei des Dienstkontoschlüssels, wenn Sie die Erweiterung hinzufügen und konfigurieren. Weitere Informationen finden Sie in der Konfigurationsreferenz.
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 die Erweiterung konfigurieren.
Daher hat diese Erweiterung nur Zugriff auf die Ressourcen, für die das Mitglied eine Berechtigung hat. Die erfolgreiche Authentifizierung durch diese Erweiterung hängt also davon ab, ob die in der Google Cloud Console gewährten Berechtigungen mit dem Zugriff übereinstimmen, der von der Erweiterung zur Laufzeit angefordert wird (über Bereiche oder Zielgruppe).
Im Allgemeinen sind die Schritte zur Authentifizierung für den Zugriff auf APIs über diese Erweiterung die folgenden:
Achten Sie darauf, dass das Mitgliedsdienstkonto, das diese Erweiterung repräsentiert, 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 durch diese Erweiterung repräsentiert wird, Rollen zuweisen.
Verwenden Sie die JSON-Datei mit dem Dienstkontoschlüssel 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 getOauth2AccessToken
-Aktion 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 beim Debugging 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 zeigt, wie Sie ein im Cache gespeichertes Token festlegen und verwenden, um die Google Translation API mit einer ServiceCallout-Richtlinie aufzurufen. Jedes Codebeispiel hier bezieht sich auf eine andere Richtlinie im Ablauf.
Die folgenden Richtlinien werden in der Reihenfolge ausgeführt, die im folgenden Flow-XML beschrieben wird:
<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, wird es durch diese Richtlinie für die Verwendung durch den API-Proxy abgerufen.
<?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 beim Cache-Lookup 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 Dienstkontoanmeldedaten, die bei der Konfiguration der
Google-Auth-Callout
-Erweiterung verwendet werden, 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, wird es von der PopulateCache-Richtlinie im Cache gespeichert, 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. Mit dieser Aktion können Sie die Zwei-Legged-OAuth-Authentifizierung zwischen Ihrem API-Proxy und Google-APIs unterstützen, wenn für die Google-APIs ein OAuth-Token erforderlich ist.
Bei der Zwei-Faktor-Authentifizierung mit OAuth wird mit dieser Erweiterungsaktion ein OAuth-Token abgerufen, indem die Authentifizierung bei Google mit einer JSON-Datei für das Dienstkonto erfolgt. Diese JSON-Datei fügen Sie hinzu, wenn Sie die Erweiterung konfigurieren. Sobald durch diese Aktion das OAuth-Token abgerufen wurde, kann Ihr API-Proxy das Token verwenden, um Aufrufe an Google APIs zu senden. Die APIs werden dann 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 getOauth2AccessToken
-Aktion 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"] , mit dem Zugriff auf alle APIs gewährt wird, auf die das Dienstkonto Zugriff hat. |
Nein. |
Antwort
Ein Objekt, das das Zugriffstoken, seinen Typ und sein Ablaufdatum in der folgenden Form enthält:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Antwortattribute
Parameter | Beschreibung | Standard | Erforderlich |
---|---|---|---|
accessToken | OAuth 2.0-Zugriffstoken. | Keine | Ja |
tokenType | Tokentyp. | Träger | Ja |
expiresInSec | Anzahl der Sekunden bis zum Ablauf des Tokens. | 3600 | Ja |
getJWTAccessToken
Ruft ein JSON Web Token (JWT)-Zugriffstoken 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 durchführen. Wenn dies möglich ist, können Sie vermeiden, eine Netzwerkanfrage an den Autorisierungsserver von Google zu senden, bevor Sie einen API-Aufruf durchfü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 getOauth2AccessToken
-Aktion 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 getOauth2AccessToken
-Aktion 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 | Der beabsichtigte Empfänger des Tokens. Dazu können eine durch 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. | Träger | 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 für diese Erweiterung spezifisch sind.
Attribut | Beschreibung | Standard | Erforderlich |
---|---|---|---|
Anmeldedaten | Wenn Sie diesen Wert in der Apigee Edge-Konsole eingeben, ist das der gesamte Inhalt der JSON-Datei Ihres Dienstkontoschlüssels. Wenn er über die Management API gesendet wird, ist er ein base64-codierter Wert, der aus der gesamten JSON-Datei des Dienstkontoschlüssels generiert wird. | Keine | Ja |