Rozszerzenie uwierzytelniania Google

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

Wersja: 2.0.0

uwierzytelniać się w Google, aby uzyskać dostęp do interfejsów API Google, które wybierzesz;

Użyj tego rozszerzenia, aby uzyskać token (OAuth lub JWT) dla usług Google Cloud, a następnie używaj go do kolejnych wywołań interfejsu API Google, na przykład za pomocą polityki wywołania usługi.

Na przykład w interfejsie API proxy możesz uzyskać token z tym rozszerzeniem, 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 ramy przepływu interfejsu API proxy.

Wymagania wstępne

Te treści zawierają informacje na temat konfigurowania i używania tego rozszerzenia. Zanim użyjesz rozszerzenia z serwera proxy interfejsu API przy użyciu zasad dotyczących rozszerzeń, musisz:

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

  2. Wygeneruj klucz konta usługi w konsoli Google Cloud.

  3. Użyj zawartości utworzonego pliku JSON klucza konta usługi podczas dodawania i konfigurowania rozszerzenia za pomocą dokumentacji konfiguracji.

Informacje o uwierzytelnianiu w Google Cloud

To rozszerzenie prosi o uwierzytelnienie w Google Cloud, reprezentując konkretnego członka organizacji zdefiniowanego w projekcie Google Cloud. Podczas konfigurowania tego rozszerzenia używasz pliku JSON konta usługi tego członka projektu.

W związku z tym to rozszerzenie będzie miało dostęp tylko do tych zasobów, do których dany użytkownik ma uprawnienia. Innymi słowy, uwierzytelnianie przez to rozszerzenie zależy od zgodności uprawnień przyznanych w konsoli Google Cloud z dostępem żądanym przez rozszerzenie (poprzez zakresy lub odbiorców) w czasie działania.

Aby uzyskać dostęp do interfejsów API z tego rozszerzenia, musisz wykonać te czynności:

  1. Upewnij się, że konto usługi członka reprezentowane przez 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 konsoli Google Cloud możesz przypisać role uczestnikom projektu, których reprezentuje to rozszerzenie.

  2. Podczas konfigurowania tego rozszerzenia użyj klucza JSON konta usługi tego członka.

  3. Podczas konfigurowania zasad dotyczących rozszerzenia wywołania, aby używać tego rozszerzenia, poproś o uwierzytelnianie tylko w przypadku zasobów, do których użytkownik projektu ma dostęp.

Przykłady

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

Uzyskiwanie tokena dostępu

W tym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia 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
}

Podana poniżej zasada przypisywania wiadomości pobiera wartość odpowiedzi z powyżej opisanej zasady ExtensionCallout i kopiuje ją do danych odpowiedzi. Może to być przydatne podczas debugowania. W praktyce możesz nie chcieć zwracać tokena do klienta.

<?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 w pamięci podręcznej tokena dostępu

Aby uniknąć niepotrzebnych wywołań do pobierania 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ż pobranie nowego tokena. Gdy token w pamięci podręcznej wygaśnie, pobierz nowy token i odśwież pamięć podręczną.

Poniższy kod z przykładowego serwera proxy interfejsu API pokazuje, jak ustawić i użyć zapisanego w pamięci podręcznej tokena do wywołania interfejsu Google Translation API z użyciem zasady ServiceCallout. Każdy przykład kodu dotyczy innej zasady w procesie.

Podane niżej zasady są wykonywane w kolejności określonej przez kod 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, te zasady pozwolą na jego użycie 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 zwróci tokena z pamięci podręcznej, ta zasada ExtensionCallout zwróci 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 należą do członka 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, aby później mogły z niego korzystać zasady w interfejsie API proxy.

      <?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 serwerem proxy 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ę w Google za pomocą pliku JSON konta usługi (dodaje się go podczas konfigurowania tego rozszerzenia). Gdy to działanie pobierze token OAuth, serwer proxy interfejsu API może używać tego tokena do wywoływania interfejsów API Google, a w efekcie wywoływać interfejsy API w imieniu konta usługi Google.

Dostęp do interfejsów Google Cloud jest filtrowany według zakresów wymienionych w zakresach OAuth 2.0 dla interfejsów API Google.

Więcej informacji o interakcji między serwerami z wykorzystaniem 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 tym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia 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ś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ę wygaśnięcia w tej formie:

{
  "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 w formie tokena sieciowego JSON (JWT). Możesz użyć tego tokena do uwierzytelnienia w interfejsach API Google, jeśli interfejs API, do którego chcesz się odwołać, ma definicję usługi opublikowaną w repozytorium interfejsów API Google w GitHub.

W przypadku niektórych interfejsów API Google możesz wykonywać autoryzowane wywołania interfejsu API, używając podpisanego JWT bezpośrednio jako tokena tożsamości, zamiast tokena dostępu OAuth 2.0. Jeśli to możliwe, możesz uniknąć wysyłania żądania sieci do serwera autoryzacji Google przed wykonaniem wywołania 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 getOauth2AccessToken rozszerzenia pobiera token do użycia 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 chroniony przez Cloud IAP

W tym przykładzie działanie getOauth2AccessToken rozszerzenia pobiera token do użycia 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ślny Wymagane
odbiorcy Docelowy odbiorca tokena. Może to być identyfikator klienta chroniony przez Cloud IAP, adres URL Cloud Functions itp. 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 ważności w sekundach. 3600 Tak

Informacje o konfiguracji

Podczas konfigurowania i wdrażania tego rozszerzenia do użycia w serwerach proxy API postępuj zgodnie z tymi instrukcjami. Instrukcje konfigurowania rozszerzenia za pomocą konsoli Apigee znajdziesz w artykule Dodawanie i konfigurowanie rozszerzenia.

Właściwości wspólne 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 tych właściwości konfiguracji, które są specyficzne dla tego rozszerzenia.

Właściwość Opis Domyślny Wymagane
dane logowania Wpisane w konsoli Apigee Edge hasło to jest całą zawartością pliku JSON klucza konta usługi. Gdy jest wysyłany za pomocą interfejsu API zarządzania, jest to wartość zakodowana w standardzie Base64 wygenerowana z całego pliku JSON klucza konta usługi. Brak Tak