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:
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ć.
Wygeneruj klucz konta usługi za pomocą konsoli Google Cloud.
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:
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.
Konfigurując to rozszerzenie, użyj kodu JSON klucza konta usługi tego użytkownika.
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>
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>
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>
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 |