Rozszerzenie uwierzytelniania Google

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Wersja: 1.3.1

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

Użyj tego rozszerzenia, aby uzyskać token (protokół OAuth lub JWT) na potrzeby usług Google Cloud, a potem używać go w kolejnych wywołaniach interfejsu Google API, np. za pomocą zasady ServiceCallout.

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

Wymagania wstępne

Ta treść zawiera informacje na temat konfigurowania tego rozszerzenia i korzystania z niego. Zanim użyjesz zasady ExtensionCallout, musisz użyć rozszerzenia z serwera proxy interfejsu API:

  1. Upewnij się, że konto, którego będzie używać rozszerzenie, czyli konto reprezentowane przez konto usługi, którego będziesz używać na potrzeby danych logowania, ma dostęp do usług Google Cloud, w których to rozszerzenie będzie się uwierzytelniać.

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

  3. Podczas dodawania i konfigurowania rozszerzenia przy użyciu informacji o konfiguracji użyj zawartości powstałego pliku JSON z kluczem konta usługi.

Informacje o uwierzytelnianiu w Google Cloud

To rozszerzenie żąda uwierzytelnienia z Google Cloud przez reprezentowanie konkretnego użytkownika zdefiniowanego w Twoim projekcie Google Cloud. Podczas konfigurowania tego rozszerzenia użyjesz pliku JSON konta usługi tego uczestnika projektu.

W związku z tym to rozszerzenie będzie mieć dostęp tylko do tych zasobów, do których użytkownik ma uprawnienia. Oznacza to, że udane uwierzytelnianie przez to rozszerzenie zależy od dopasowania uprawnień przyznanych w konsoli Google Cloud do dostępu, o który prosi to rozszerzenie (przez zakresy lub listę odbiorców) w czasie działania.

Czynności, które musisz wykonać, aby uwierzytelnić dostęp do interfejsów API za pomocą tego rozszerzenia, będą zwykle przebiegać w następujący sposób:

  1. Upewnij się, że konto usługi członka, którego reprezentuje to rozszerzenie, ma dostęp do zasobu Google, do którego chcesz uzyskać dostęp. Na stronie Cloud Identity and Access Management (Cloud IAM) w Google Cloud Console możesz przyznawać role użytkownikowi projektu, którego reprezentuje to rozszerzenie.

  2. Konfigurując to rozszerzenie, użyj kodu JSON klucza konta usługi tego użytkownika.

  3. Podczas konfigurowania zasad ExtensionCallout na potrzeby korzystania z tego rozszerzenia żądaj uwierzytelniania tylko w przypadku zasobów, do których użytkownik projektu ma dostęp.

Sample

Poniższe przykłady pokazują, jak uwierzytelniać w Google Cloud za pomocą zasad ExtensionCallout.

Uzyskiwanie tokena dostępu

W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token, który jest używany w żądaniach wysyłanych 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ą do ł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>

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

Aby uniknąć wykonywania niepotrzebnych wywołań pobierania tokena, możesz zapisać otrzymany token 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 wygaśnie, pobierz nowy token i odśwież z nim pamięć podręczną.

Poniższy kod z przykładowego serwera proxy interfejsu API pokazuje, jak ustawić token z pamięci podręcznej i użyć go do wywołania Google Translation API z zasadą ServiceCallout. Każdy przykładowy kod odnosi się do innej zasady w ramach procesu.

Poniższe zasady są wykonywane w kolejności opisanej w tym pliku 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. Poniższa 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 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 w wyniku wyszukiwania w pamięci podręcznej nie zostanie pobrany token z pamięci podręcznej, poniższe zasady ExtensionCallout pobiera nowy token OAuth, określając jako jego zakres interfejs Google Cloud Translation API. Google Cloud zwraca prawidłowy token, jeśli dane logowania do 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 serwera 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 włączyć 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 przez uwierzytelnianie w Google przy użyciu kodu JSON konta usługi (ten kod 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, skutecznie wywołując 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 OAuth 2.0 dla interfejsów API Google.

Więcej informacji o interakcjach między serwerami za pomocą protokołu OAuth 2.0 znajdziesz w artykule Używanie protokołu OAuth 2.0 w aplikacjach między serwerami.

Składnia

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

Przykład

W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token, który jest używany w żądaniach wysyłanych do Cloud Translation API.

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

Parametry żądania

Parametr Opis Typ Domyślne 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 zapewnia dostęp do wszystkich interfejsów API, do których dostęp ma konto usługi. Nie.

Odpowiedź

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

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

Właściwości odpowiedzi

Parametr Opis Domyślne 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). Za pomocą tego tokena możesz uwierzytelniać się w interfejsach API Google, jeśli wywoływany przez Ciebie interfejs API ma definicję usługi opublikowaną w repozytorium interfejsów API Google na GitHubie.

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 okaziciela zamiast tokena dostępu OAuth 2.0. Gdy to możliwe, unikasz konieczności wysyłania żądania sieciowego do serwera autoryzacji Google przed wywołaniem interfejsu API.

Więcej informacji o uwierzytelnianiu przy użyciu tokena dostępu JWT znajdziesz w artykule Używanie protokołu 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, który jest używany w żądaniach wysyłanych 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, który jest używany w żądaniach wysyłanych do Cloud Translation API.

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

Parametry żądania

Parametr Opis Domyślne Wymagane
audience Zamierzony odbiorca tokena. Może to być 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ślne Wymagane
accessToken Token dostępu. Brak Tak
tokenType Typ tokena. Nośnik Tak
expiresInSec Wygasa za kilka sekund. 3600 Tak

Dokumentacja konfiguracji

Skorzystaj z podanych niżej instrukcji podczas konfigurowania i wdrażania tego rozszerzenia na potrzeby serwerów proxy interfejsów API. Instrukcje konfigurowania rozszerzenia w 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ń

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

Właściwość Opis Domyślne Wymagane
dane logowania Wpisana w konsoli Apigee Edge jest to cała zawartość pliku JSON klucza konta usługi. Gdy jest wysyłana przez interfejs API zarządzania, jest to wartość zakodowana w formacie base64 wygenerowana na podstawie całego pliku JSON klucza konta usługi. Brak Tak