Google-Authentifizierungserweiterung

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

<ph type="x-smartling-placeholder">

Version: 1.3.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 das Token für nachfolgende Aufrufe der Google API verwenden, z. B. mithilfe einer ServiceCallout-Richtlinie.

In einem API-Proxy können Sie beispielsweise ein Token mit dieser Erweiterung abrufen, das Token mithilfe der schwierigCache-Richtlinie im Cache speichern und das Token dann über die Richtlinie "ServiceCallout" übergeben, um innerhalb eines API-Proxy-Ablaufs auf Google Cloud-Dienste zuzugreifen.

Vorbereitung

Dieser Inhalt bietet eine Referenz zum Konfigurieren und Verwenden dieser Erweiterung. Bevor Sie die Erweiterung über einen API-Proxy mithilfe der ExtensionCallout-Richtlinie verwenden können, müssen Sie:

  1. Das Konto, das von der Erweiterung verwendet wird – also das Konto des Dienstkontos, das Sie für Anmeldedaten verwenden – muss Zugriff auf die Google Cloud-Dienste haben, mit denen sich die Erweiterung authentifiziert.

  2. Generieren Sie mit der Google Cloud Console einen Schlüssel für das Dienstkonto.

  3. Verwenden Sie den Inhalt der resultierenden JSON-Datei mit dem Dienstkontoschlüssel, wenn Sie die Erweiterung mithilfe der Konfigurationsreferenz hinzufügen und konfigurieren.

Authentifizierung mit Google Cloud

Diese Erweiterung fordert die Authentifizierung von Google Cloud an. Dabei stellt sie ein bestimmtes Mitglied dar, das in Ihrem Google Cloud-Projekt definiert ist. Beim Konfigurieren dieser Erweiterung verwenden Sie die JSON-Datei des Dienstkontos dieses Projektmitglieds.

Dadurch erhält diese Erweiterung nur Zugriff auf die Ressourcen, für die dieses Mitglied die entsprechende Berechtigung hat. Mit anderen Worten: Eine erfolgreiche Authentifizierung durch diese Erweiterung hängt von einer Übereinstimmung zwischen den in der Google Cloud Console gewährten Berechtigungen und dem Zugriff ab, der zur Laufzeit von der Erweiterung (über Bereiche oder Zielgruppe) angefordert wird.

Im Allgemeinen gehen Sie so vor, um den Zugriff auf APIs über diese Erweiterung zu authentifizieren:

  1. 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 durch diese Erweiterung repräsentierten Projektmitglied Rollen zuweisen.

  2. Verwenden Sie beim Konfigurieren dieser Erweiterung die JSON-Datei des Dienstkontoschlüssels dieses Mitglieds.

  3. 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 die Authentifizierung bei Google Cloud mithilfe der Richtlinie ExtensionCallout funktioniert.

Zugriffstoken anfordern

Im folgenden Beispiel ruft die Aktion getOauth2AccessToken der Erweiterung ein Token zur Verwendung in Anfragen an die Cloud Translation API ab.

<?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 obigen ExtensionCallout-Richtlinie ab und kopiert ihn in die Antwortnutzlast. Dies kann bei der Fehlerbehebung hilfreich sein. In der Praxis sollten Sie das Token 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 erhaltene Token im Cache speichern. Bei nachfolgenden Aufrufen, die ein Token erfordern, 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 API-Beispiel-Proxy zeigt, wie ein im Cache gespeichertes Token festgelegt und verwendet wird, 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 in der folgenden Ablauf-XML beschriebenen Reihenfolge ausgeführt:

  <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>
  1. Mit der folgenden LookupCache-Richtlinie wird versucht, ein Token aus dem Cache abzurufen. Wenn das Token bereits abgerufen und im Cache gespeichert wurde, ruft diese Richtlinie es zur 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>
    
  2. Wenn bei der Cache-Suche kein Token im Cache abgerufen wird, ruft die folgende ExtensionCallout-Richtlinie ein neues OAuth-Token ab, wobei die Google Cloud Translation API als Bereich für das Token angegeben wird. Google Cloud gibt ein gültiges Token zurück, wenn die beim Konfigurieren der Erweiterung Google-Auth-Callout verwendeten Dienstkonto-Anmeldedaten ein Projektmitglied mit Zugriff auf die API sind.

      <?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>
    
  3. Nachdem die ExtensionCallout-Richtlinie ein neues Token abgerufen hat, wird es von der EEA-Richtlinie zur späteren Verwendung durch Richtlinien im API-Proxy im Cache gespeichert.

      <?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

<ph type="x-smartling-placeholder">

getOauth2AccessToken

Ruft ein OAuth 2.0-Zugriffstoken ab. Verwenden Sie diese Aktion, um zweibeiniges OAuth zwischen Ihrem API-Proxy und Google APIs zu unterstützen, wenn die Google APIs ein OAuth-Token benötigen.

Beim zweibeinigen OAuth ruft diese Erweiterungsaktion ein OAuth-Token ab, indem sie sich über eine Dienstkonto-JSON-Datei bei Google authentifiziert. Diese JSON-Datei fügen Sie hinzu, wenn Sie diese Erweiterung konfigurieren. Sobald diese Aktion das OAuth-Token abgerufen hat, kann Ihr API-Proxy das Token verwenden, um Aufrufe an Google APIs zu senden und die APIs im Namen des Google-Dienstkontos aufzurufen.

Der Zugriff auf Google Cloud APIs wird anhand der Bereiche gefiltert, die unter OAuth 2.0-Bereiche für Google APIs aufgeführt sind.

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 zur Verwendung in Anfragen an die Cloud Translation API ab.

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-translation"
  ]
}]]></Input>

Anfrageparameter

Parameter Beschreibung Typ Default 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 Zugriff auf alle APIs, 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
}

Antworteigenschaften

Parameter Beschreibung Standard Erforderlich
accessToken OAuth 2.0-Zugriffstoken. Keine Ja
tokenType Tokentyp. Träger Ja
expiresInSec Anzahl der Sekunden, bis das Token abläuft. 3600 Ja

getJWTAccessToken

Ruft ein Zugriffstoken für JSON Web Token (JWT) ab. Sie können dieses Token zur Authentifizierung bei Google APIs verwenden, wenn für die aufzurufende API eine Dienstdefinition im GitHub-Repository für Google APIs veröffentlicht wurde.

Bei einigen Google APIs können Sie autorisierte API-Aufrufe mit einem signierten JWT direkt als Inhabertoken statt mit einem OAuth 2.0-Zugriffstoken ausführen. Wenn dies möglich ist, müssen Sie vor einem API-Aufruf keine Netzwerkanfrage an den Autorisierungsserver von Google senden.

Weitere Informationen zur Authentifizierung mit einem JWT-Zugriffstoken findest du 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 zur Verwendung in Anfragen an die Cloud Translation API ab.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>

Beispiel: Cloud IAP-gesicherte Client-ID

Im folgenden Beispiel ruft die Aktion getOauth2AccessToken der Erweiterung ein Token zur Verwendung in Anfragen an die Cloud Translation API ab.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>

Anfrageparameter

Parameter Beschreibung Standard Erforderlich
Zielgruppe Beabsichtigter Empfänger des Tokens. Dies kann eine mit Cloud IAP gesicherte Client-ID, eine Cloud Functions-URL usw. umfassen. Keine Ja

Antwort

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

Antworteigenschaften

Parameter Beschreibung Standard Erforderlich
accessToken Zugriffstoken. Keine Ja
tokenType Tokentyp. Träger Ja
expiresInSec Läuft in Sekunden ab. 3600 Ja

Konfigurationsreferenz

Verwenden Sie Folgendes, wenn Sie diese Erweiterung zur Verwendung in API-Proxys konfigurieren und bereitstellen. Eine schrittweise 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 Bei Eingabe in die Apigee Edge-Konsole ist dies der gesamte Inhalt der JSON-Datei Ihres Dienstkontoschlüssels. Beim Senden über die Verwaltungs-API handelt es sich um einen base64-codierten Wert, der aus der gesamten JSON-Datei mit dem Dienstkontoschlüssel generiert wird. Keine Ja