Rozszerzenie uwierzytelniania Google

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Wersja: 2.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, np. za pomocą zasady ServiceCallout.

Na przykład w proxy interfejsu API możesz uzyskać token za pomocą tego rozszerzenia, zapisać go w pamięci podręcznej za pomocą zasady PopulateCache, a następnie przekazać go za pomocą zasady ServiceCallout, aby uzyskać dostęp do usług Google Cloud z poziomu przepływu proxy interfejsu API.

Wymagania wstępne

Ta treść zawiera informacje o konfigurowaniu i używaniu tego rozszerzenia. Zanim zaczniesz korzystać z rozszerzenia w proxy interfejsu API za pomocą zasady ExtensionCallout, musisz:

  1. Upewnić się, że konto, którego będzie używać rozszerzenie (konto reprezentowane przez konto usługi, którego będziesz używać do uwierzytelniania), ma dostęp do usług Google Cloud, w których rozszerzenie będzie się uwierzytelniać.

  2. Wygenerować klucz konta usługi za pomocą konsoli Google Cloud.

  3. Podczas dodawania i konfigurowania rozszerzenia za pomocą dokumentacji konfiguracyjnej użyć zawartości pliku JSON klucza konta usługi.

Uwierzytelnianie w Google Cloud

To rozszerzenie prosi o uwierzytelnienie w Google Cloud, reprezentując konkretnego konto (należące do grupy/zbioru/zasobu) zdefiniowane w Twoim projekcie w chmurze Google. Podczas konfigurowania tego rozszerzenia używasz pliku JSON konta usługi tego użytkownika projektu.

Dzięki temu rozszerzenie będzie miało dostęp tylko do tych zasobów, do których ten użytkownik ma uprawnienia. Innymi słowy, pomyślne uwierzytelnienie przez to rozszerzenie zależy od zgodności uprawnień przyznanych w konsoli Google Cloud z dostępem, o który prosi rozszerzenie (za pomocą zakresów lub odbiorców) w czasie działania.

Ogólnie rzecz biorąc, kroki uwierzytelniania w celu uzyskania dostępu do interfejsów API z tego rozszerzenia będą wyglądać tak:

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

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

  3. Podczas konfigurowania zasady ExtensionCallout do używania tego rozszerzenia proś o uwierzytelnienie tylko w przypadku zasobów, do których ma dostęp użytkownik projektu.

Przykłady

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

Uzyskiwanie tokena dostępu

W tym przykładzie działanie rozszerzenia getOauth2AccessToken pobiera token do użycia w żądaniach wysyłanych do interfejsu 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ść reakcji wygląda mniej więcej tak:

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

Ta zasada AssignMessage pobiera wartość odpowiedzi z zasady ExtensionCallout i kopiuje ją w ładunku odpowiedzi. Może to być przydatne podczas debugowania. W praktyce 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>

Zapisywanie tokena dostępu w pamięci podręcznej

Aby uniknąć 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 go z pamięci podręcznej Apigee Edge będzie szybsze niż uzyskanie nowego tokena. Gdy token zapisany w pamięci podręcznej wygaśnie, pobierz nowy token i odśwież pamięć podręczną.

Ten fragment kodu z przykładowego proxy interfejsu API pokazuje, jak ustawić i używać tokena zapisanego w pamięci podręcznej do wywoływania interfejsu Google Translation API za pomocą zasady ServiceCallout. Każdy przykład kodu dotyczy innej zasady w przepływie.

Te zasady są wykonywane w kolejności opisanej w tym 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 LookupCache próbuje pobrać 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 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 zwróci tokena zapisanego w pamięci podręcznej, ta zasada ExtensionCallout pobierze nowy token OAuth, określając interfejs Google Cloud Translation API jako zakres tokena. Google Cloud zwraca prawidłowy token, jeśli dane logowania konta usługi użyte podczas konfigurowania rozszerzenia Google-Auth-Callout reprezentują użytkownika 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 PopulateCache zapisze go w pamięci podręcznej do późniejszego użycia przez zasady w 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 obsługiwać dwuskładnikowe uwierzytelnianie OAuth między proxy interfejsu API a interfejsami API Google, gdy interfejsy API Google wymagają tokena OAuth.

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

Dostęp do interfejsów Google Cloud APIs jest filtrowany przez zakresy wymienione w sekcji Zakresy OAuth 2.0 dla interfejsów API Google.

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

Składnia

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

Przykład

W tym przykładzie działanie rozszerzenia getOauth2AccessToken pobiera token do użycia w żądaniach wysyłanych do interfejsu 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 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 tej postaci:

{
  "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łać, ma definicję usługi opublikowaną w repozytorium GitHub interfejsów API Google.

W przypadku niektórych interfejsów API Google możesz wykonywać autoryzowane wywołania interfejsu API, używając podpisanego tokena JWT bezpośrednio jako tokena nośnika, a nie tokena dostępu OAuth 2.0. Gdy jest to możliwe, możesz uniknąć 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 protokołu OAuth 2.0 w aplikacjach międzyserwerowych.

Składnia

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

Przykład: adres URL funkcji w Cloud Functions

W tym przykładzie działanie rozszerzenia getOauth2AccessToken pobiera token do użycia w żądaniach wysyłanych do interfejsu 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 tym przykładzie działanie rozszerzenia getOauth2AccessToken pobiera token do użycia w żądaniach wysyłanych do interfejsu Cloud Translation API.

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

Parametry żądania

Parametr Opis Domyślny Wymagane
odbiorcy Docelowy odbiorca tokena. Może to być identyfikator klienta zabezpieczony przez Cloud IAP lub adres URL funkcji w Cloud Functions. 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 Czas wygaśnięcia w sekundach. 3600 Tak

Dokumentacja konfiguracyjna

Podczas konfigurowania i wdrażania tego rozszerzenia do użycia w proxy interfejsu API użyj tych informacji. Aby dowiedzieć się, jak skonfigurować rozszerzenie za pomocą konsoli Apigee, przeczytaj artykuł Dodawanie i konfigurowanie rozszerzenia.

Wspólne właściwości rozszerzenia

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 rozszerzenia

Określ wartości tych właściwości konfiguracyjnych specyficznych dla tego rozszerzenia.

Właściwość Opis Domyślny Wymagane
dane logowania Gdy wpiszesz je w konsoli Apigee Edge, będzie to cała zawartość pliku JSON klucza konta usługi. Gdy wysyłasz je za pomocą interfejsu Management API, jest to wartość zakodowana w standardzie Base64 wygenerowana na podstawie całego pliku JSON klucza konta usługi. Brak Tak