Rozszerzenie uwierzytelniania Google

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Wersja: 1.0.2

Uwierzytelnij się w Google, aby uzyskać dostęp do określonych interfejsów API Google.

Użyj tego rozszerzenia, aby uzyskać token (OAuth lub JWT) dla usług Google Cloud, a następnie użyj go w kolejnych wywołaniach interfejsu API Google, na przykład przy użyciu zasad ServiceCallout.

Na przykład w serwerze proxy interfejsu API możesz uzyskać token z tym rozszerzeniem, umieścić go w pamięci podręcznej za pomocą zasad PopulationCache, a następnie przekazać token za pomocą zasady ServiceCallout, aby uzyskać dostęp do usług Google Cloud z poziomu procesu proxy interfejsu API.

Wymagania wstępne

W tym artykule znajdziesz informacje na temat konfigurowania i używania tego rozszerzenia. Zanim użyjesz rozszerzenia z serwera proxy interfejsu API za pomocą zasady ExtensionCallout, musisz:

  1. Upewnij się, że konto, którego będzie używać rozszerzenie (reprezentowane przez konto usługi, którego będziesz używać w przypadku danych logowania), ma dostęp do usług Google Cloud, za pomocą których rozszerzenie będzie się uwierzytelniać.

  2. Wygeneruj klucz dla konta usługi za pomocą konsoli Google Cloud.

  3. Użyj zawartości otrzymanego pliku JSON klucza konta usługi podczas dodawania i konfigurowania rozszerzenia w dokumentacji konfiguracji.

Informacje o uwierzytelnianiu w Google Cloud

To rozszerzenie wymaga uwierzytelnienia od Google Cloud, reprezentując konkretnego użytkownika zdefiniowanego w projekcie Google Cloud. Podczas konfigurowania tego rozszerzenia używasz pliku JSON konta usługi członka projektu.

W efekcie to rozszerzenie będzie mieć dostęp tylko do tych zasobów, do których użytkownik ma uprawnienia. Innymi słowy, pomyślne uwierzytelnienie przez to rozszerzenie zależy od dopasowania uprawnień przyznanych w konsoli Google Cloud a dostępem, o które prosi rozszerzenie (za pomocą zakresów lub odbiorców) w czasie działania.

Ogólnie rzecz biorąc, aby uwierzytelnić dostęp do interfejsów API z tego rozszerzenia:

  1. Upewnij się, że konto usługi użytkownika reprezentowanego przez to rozszerzenie ma dostęp do zasobu Google, do którego chcesz uzyskać dostęp. Za pomocą strony Cloud Identity and Access Management (Cloud IAM) w konsoli Google Cloud możesz przyznać role użytkownikowi projektu reprezentowanego przez to rozszerzenie.

  2. Podczas konfigurowania tego rozszerzenia użyj kodu JSON klucza konta usługi tego użytkownika.

  3. Podczas konfigurowania zasady ExtensionCallout tak, aby używać tego rozszerzenia, wymagaj uwierzytelniania tylko tych zasobów, do których użytkownik projektu ma dostęp.

Przykłady

Poniższe przykłady pokazują, jak uwierzytelnić się w Google Cloud przy użyciu zasady ExtensionCallout.

Uzyskiwanie tokena dostępu

W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia w żądaniach kierowanych do Cloud Translation API.

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

Wartość odpowiedzi wygląda mniej więcej tak:

{
  "access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
  "token_type":"Bearer",
  "expiresInSec": 3600
}

Poniższa zasada AssignMessage pobiera wartość odpowiedzi z powyższej zasady ExtensionCallout i kopiuje ją w ładunku odpowiedzi. Może to być przydatne podczas debugowania. W rzeczywistości możesz nie chcieć zwracać tokena klientowi.

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

Buforowanie tokena dostępu

Aby uniknąć wykonywania niepotrzebnych wywołań w celu pobrania tokena, rozważ zapisanie otrzymanego tokena w pamięci podręcznej. W przypadku kolejnych wywołań wymagających tokena pobranie tokena z pamięci podręcznej Apigee Edge będzie szybsze niż uzyskanie nowego tokena. Gdy token zapisany w pamięci podręcznej utraci ważność, pobierz nowy token i odśwież z nim pamięć podręczną.

Poniższy kod z przykładowego serwera proxy interfejsu API pokazuje, jak skonfigurować i użyć tokena z pamięci podręcznej do wywoływania interfejsu Google Translation API z zasadą ServiceCallout. Każdy przykładowy kod odnosi się do innej zasady w przepływie.

Poniższe zasady są wykonywane w kolejności opisanej w poniższym kodzie XML przepływu:

  <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. Ta zasada wyszukiwania pamięci podręcznej próbuje uzyskać token z pamięci podręcznej. Jeśli token został już uzyskany i zapisany w pamięci podręcznej, ta zasada pobierze go do użycia przez serwer proxy interfejsu 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>
    
  2. Jeśli wyszukiwanie w pamięci podręcznej nie pobierze tokena z pamięci podręcznej, poniższe zasady ExtensionCallout pobierają nowy token OAuth, określając interfejs Google Cloud Translation API jako zakres tokena. Google Cloud zwraca prawidłowy token, jeśli dane logowania do konta usługi użyte podczas konfigurowania rozszerzenia Google-Auth-Callout odpowiadają członkowi projektu, który ma dostęp do interfejsu 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>
    
  3. Gdy zasada ExtensionCallout pobierze nowy token, zasada PopulationCache zapisze go w pamięci podręcznej na potrzeby późniejszego użycia przez zasady na serwerze proxy interfejsu 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>
    

Działania

getOauth2AccessToken

Pobiera token dostępu OAuth 2.0. Użyj tego działania, aby zapewnić obsługę dwuetapowej autoryzacji OAuth między serwerem proxy interfejsu API a interfejsami API Google, gdy interfejsy API Google wymagają tokena OAuth.

W przypadku dwuetapowej autoryzacji OAuth to działanie rozszerzenia pobiera token OAuth, uwierzytelniając się z Google za pomocą kodu JSON konta usługi (ten plik JSON dodajesz podczas konfigurowania tego rozszerzenia). Gdy to działanie pobierze token OAuth, serwer proxy interfejsu API może go używać do wywoływania interfejsów API Google, co skutecznie wywołuje te interfejsy w imieniu konta usługi Google.

Dostęp do interfejsów Google Cloud APIs jest filtrowany według zakresów wymienionych w artykule Zakresy protokołu OAuth 2.0 dla interfejsów API Google.

Więcej informacji o interakcjach między serwerami z protokołem OAuth 2.0 znajdziesz w artykule Używanie OAuth 2.0 w aplikacjach międzyserwerowych.

Składnia

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
  "scope" : [
    "scope1",
    "scope2"
  ]
}]]></Input>

Przykład

W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia w żądaniach kierowanych do Cloud Translation API.

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

Parametry żądania

Parametr Opis Typ Domyślny Wymagane
zakres Tablica zakresów protokołu OAuth 2.0. Więcej informacji o zakresach znajdziesz w artykule Zakresy OAuth 2.0 dla interfejsów API Google. Tablica ["https://www.googleapis.com/auth/cloud-platform"], który przyznaje dostęp do wszystkich interfejsów API, do których ma dostęp konto usługi. Nie.

Odpowiedź

Obiekt zawierający token dostępu, jego typ i datę ważności w formacie:

{
  "accessToken": "ewogICJ0eXB...C5jb20iCn0K",
  "token_type": "Bearer",
  "expiresInSec": 3600
}

Właściwości odpowiedzi

Parametr Opis Domyślny Wymagane
accessToken Token dostępu OAuth 2.0. Brak Tak
tokenType Typ tokena. Nośnik Tak
expiresInSec Liczba sekund do wygaśnięcia tokena. 3600 Tak

getJWTAccessToken

Pobiera token dostępu tokena sieciowego JSON (JWT). Możesz użyć tego tokena do uwierzytelniania w interfejsach API Google, jeśli interfejs API, który chcesz wywoływać, ma definicję usługi opublikowaną w repozytorium interfejsów API Google na GitHubie.

Niektóre interfejsy API Google umożliwiają wykonywanie autoryzowanych wywołań interfejsu API przy użyciu podpisanego tokena JWT bezpośrednio jako tokena okaziciela zamiast tokena dostępu OAuth 2.0. Gdy jest to możliwe, pozwala uniknąć konieczności wysyłania żądania sieciowego do serwera autoryzacji Google przed wywołaniem interfejsu API.

Więcej informacji o uwierzytelnianiu za pomocą tokena dostępu JWT znajdziesz w artykule Używanie OAuth 2.0 w aplikacjach między serwerami.

Składnia

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

Przykład: URL funkcji w Cloud Functions

W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia w żądaniach kierowanych do Cloud Translation API.

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

Przykład: identyfikator klienta zabezpieczony przez Cloud IAP

W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia w żądaniach kierowanych do Cloud Translation API.

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

Parametry żądania

Parametr Opis Domyślny Wymagane
audience Docelowy odbiorca tokena. Może to obejmować identyfikator klienta zabezpieczony przez Cloud IAP, adres URL w Cloud Functions itd. Brak Tak

Odpowiedź

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

Właściwości odpowiedzi

Parametr Opis Domyślny Wymagane
accessToken Token dostępu. Brak Tak
tokenType Typ tokena. Nośnik Tak
expiresInSec Wygasa w ciągu kilku sekund. 3600 Tak

Dokumentacja konfiguracji

Podczas konfigurowania i wdrażania tego rozszerzenia na potrzeby serwerów proxy interfejsu API użyj poniższych wskazówek. Instrukcje konfigurowania rozszerzenia za pomocą konsoli Apigee znajdziesz w artykule Dodawanie i konfigurowanie rozszerzenia.

Typowe właściwości rozszerzeń

Dla każdego rozszerzenia dostępne są poniższe właściwości.

Usługa Opis Domyślnie Wymagany
name Nazwa nadana konfiguracji rozszerzenia. Brak Tak
packageName Nazwa pakietu rozszerzeń podana przez Apigee Edge. Brak Tak
version Numer wersji pakietu rozszerzenia, z którego konfigurujesz rozszerzenie. Brak Tak
configuration Wartość konfiguracji specyficzna dla dodawanego rozszerzenia. Zobacz Właściwości tego pakietu rozszerzeń Brak Tak

Właściwości tego pakietu rozszerzeń

Określ wartości następujących właściwości konfiguracji specyficznych dla tego rozszerzenia.

Właściwość Opis Domyślny Wymagane
dane logowania Wpisanie w konsoli Apigee Edge obejmuje całą zawartość pliku JSON klucza konta usługi. W przypadku wysyłania przez interfejs API zarządzania jest to wartość zakodowana w standardzie base64 wygenerowana na podstawie całego pliku JSON klucza konta usługi. Brak Tak