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 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 w ramach przepływu proxy interfejsu API.
Wymagania wstępne
Te treści zawierają informacje o konfigurowaniu i używaniu tego rozszerzenia. Zanim zaczniesz korzystać z rozszerzenia w ramach serwera proxy interfejsu API za pomocą zasady ExtensionCallout, musisz:
Sprawdź, czy 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ć.
Wygeneruj klucz konta usługi za pomocą konsoli Google Cloud.
Podczas dodawania i konfigurowania rozszerzenia użyj zawartości utworzonego pliku JSON klucza konta usługi, korzystając z dokumentacji konfiguracji.
Uwierzytelnianie w Google Cloud
To rozszerzenie żąda uwierzytelnienia w Google Cloud, reprezentując konkretnego użytkownika zdefiniowanego w Twoim projekcie Google Cloud. Podczas konfigurowania tego rozszerzenia używasz pliku JSON konta usługi tego członka projektu.
W związku z tym 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 zgodności między uprawnieniami przyznanymi w konsoli Google Cloud a dostępem, o który rozszerzenie prosi w czasie działania (za pomocą zakresów lub odbiorców).
Ogólnie rzecz biorąc, aby uwierzytelnić się w celu uzyskania dostępu do interfejsów API z tego rozszerzenia, musisz wykonać te czynności:
Sprawdź, czy konto usługi, które 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 konsoli Google Cloud możesz przyznawać role uczestnikowi projektu, którego reprezentuje to rozszerzenie.
Podczas konfigurowania tego rozszerzenia użyj klucza JSON konta usługi tego członka.
Podczas konfigurowania zasady ExtensionCallout do korzystania z tego rozszerzenia żądaj uwierzytelniania tylko w przypadku zasobów, do których ma dostęp członek Twojego projektu.
Przykłady
Poniższe przykłady pokazują, jak uwierzytelniać się w Google Cloud za pomocą zasad ExtensionCallout.
Uzyskiwanie tokena dostępu
W poniższym przykładzie działanie getOauth2AccessToken rozszerzenia 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ść odpowiedzi wygląda mniej więcej tak:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
Poniższe zasady AssignMessage pobierają wartość odpowiedzi z zasad ExtensionCallout i kopiują ją do ł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 w pamięci podręcznej otrzymanego tokena. 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 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ć tokena z pamięci podręcznej do wywołania interfejsu Google Translation API za pomocą zasady ServiceCallout. Każdy przykład kodu dotyczy innych zasad w procesie.
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 wyszukiwanie w pamięci podręcznej nie zwróci tokena, 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-Calloutreprezentują 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>Gdy zasada ExtensionCallout pobierze nowy token, zasada PopulateCache zapisuje go w pamięci podręcznej, aby można go było później użyć w zasadach w 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 obsługiwać dwuetapowe uwierzytelnianie 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ę w Google za pomocą pliku JSON konta usługi (dodajesz ten plik JSON podczas konfigurowania tego rozszerzenia). Gdy ta czynność pobierze token OAuth, Twój serwer proxy interfejsu API może używać go do wywoływania interfejsów API Google, czyli wywoływać interfejsy API w imieniu konta usługi Google.
Dostęp do interfejsów API Google Cloud jest filtrowany przez zakresy wymienione w artykule Zakresy OAuth 2.0 dla interfejsów API Google.
Więcej informacji o interakcjach między serwerami z użyciem 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 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ę wygaśnięcia 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 JWT (JSON Web Token). 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 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 tokena JWT bezpośrednio jako tokena dostępu, a nie tokena dostępu OAuth 2.0. Jeśli jest to możliwe, możesz uniknąć wysyłania żądania sieciowego 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 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 poniższym przykładzie działanie getOauth2AccessToken rozszerzenia 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 poniższym przykładzie działanie getOauth2AccessToken rozszerzenia 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, adres URL 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 | Wygasa po określonej liczbie sekund. | 3600 | Tak |
Informacje o konfiguracji
Podczas konfigurowania i wdrażania tego rozszerzenia do użycia w proxy interfejsów API postępuj zgodnie z tymi instrukcjami. Instrukcje konfigurowania rozszerzenia za pomocą konsoli Apigee znajdziesz w artykule Dodawanie i konfigurowanie rozszerzenia.
Wspólne 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 tych właściwości konfiguracji, które są specyficzne dla tego rozszerzenia.
| Właściwość | Opis | Domyślny | Wymagane |
|---|---|---|---|
| dane logowania | Po wpisaniu w konsoli Apigee Edge jest to cała zawartość pliku JSON klucza konta usługi. Gdy jest wysyłany 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 |