Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Версия: 1.3.1
Выполните аутентификацию в Google, чтобы получить доступ к указанным API Google.
Используйте это расширение, чтобы получить токен (OAuth или JWT) для сервисов Google Cloud, а затем используйте токен для последующих вызовов Google API, например с помощью правила ServiceCallout.
Например, в прокси-сервере API можно получить токен с этим расширением, сохранить его в кеше с помощью правила PopulateCache, а затем передать токен через правило ServiceCallout, чтобы получить доступ к сервисам Google Cloud из потока прокси-сервера API.
Требования
В нем приведена информация о том, как настроить и использовать это расширение. Прежде чем использовать расширение из прокси-сервера API с помощью правила ExtensionCallout, необходимо:
Убедитесь, что у аккаунта, который будет использовать расширение (аккаунта, представленного сервисным аккаунтом, который вы будете использовать для учетных данных), есть доступ к сервисам Google Cloud, в которых будет проходить аутентификация расширения.
Создайте ключ для сервисного аккаунта в консоли Google Cloud.
Используйте содержимое полученного JSON-файла ключа сервисного аккаунта при добавлении и настройке расширения с помощью справочника по конфигурации.
Об аутентификации в Google Cloud
Это расширение запрашивает аутентификацию в Google Cloud, представляя определенного участника, заданного в вашем облачном проекте Google Cloud. При настройке этого расширения вы используете JSON-файл сервисного аккаунта участника проекта.
В результате расширение получит доступ только к тем ресурсам, на которые у этого пользователя есть разрешение. Другими словами, успешная аутентификация с помощью этого расширения зависит от того, совпадают ли разрешения, предоставленные в консоли Google Cloud, с доступом, запрошенным расширением (через области действия или аудиторию) во время выполнения.
Как правило, для аутентификации при доступе к API из этого расширения нужно выполнить следующие действия:
Убедитесь, что у сервисного аккаунта, который представляет это расширение, есть доступ к ресурсу Google, к которому вы хотите получить доступ. На странице Cloud Identity and Access Management (Cloud IAM) в консоли Google Cloud можно предоставить роли участнику проекта, которого представляет это расширение.
При настройке этого расширения используйте JSON-файл ключа сервисного аккаунта этого участника.
При настройке правила ExtensionCallout для использования этого расширения запрашивайте аутентификацию только для ресурсов, к которым у участника проекта есть доступ.
Примеры
Ниже приведены примеры аутентификации в Google Cloud с помощью правила ExtensionCallout.
Как получить токен доступа
В следующем примере действие getOauth2AccessToken расширения получает токен для использования в запросах к 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>
Значение ответа выглядит примерно так:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
Следующее правило AssignMessage извлекает значение ответа из правила ExtensionCallout, приведенного выше, и копирует его в полезную нагрузку ответа. Это может быть полезно при отладке. На практике возвращать токен клиенту может быть нежелательно.
<?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>
Как кешировать токен доступа
Чтобы избежать ненужных вызовов для получения токена, рассмотрите возможность его кеширования. При последующих вызовах, требующих токена, извлечение токена из кеша Apigee Edge будет быстрее, чем получение нового токена. Когда срок действия токена, хранящегося в кеше, истечет, получите новый токен и обновите кеш.
В следующем примере кода из прокси-сервера API показано, как задать и использовать кешированный токен для вызова Google Translation API с помощью правила ServiceCallout. Каждый пример кода относится к определенному правилу.
Правила, описанные ниже, выполняются в последовательности, заданной в следующем XML-коде:
<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>
Следующее правило LookupCache пытается получить токен из кеша. Если токен уже получен и сохранен в кеше, это правило получит его для использования прокси-сервером 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>Если при поиске в кеше не удается найти кешированный токен, следующее правило ExtensionCallout получает новый токен OAuth, указывая API Google Cloud Translation в качестве области действия токена. Google Cloud возвращает действительный токен, если учетные данные сервисного аккаунта, использованные при настройке расширения
Google-Auth-Callout, представляют собой участника проекта, у которого есть доступ к 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>После того как политика ExtensionCallout получит новый токен, политика PopulateCache сохранит его в кеше, чтобы его можно было использовать в других политиках в прокси-сервере 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>
Действия
getOauth2AccessToken
Получает токен доступа OAuth 2.0. Используйте это действие для поддержки двусторонней аутентификации OAuth между прокси-сервером API и API Google, когда API Google требуют токен OAuth.
При использовании двухстороннего протокола OAuth это действие расширения получает токен OAuth, выполняя аутентификацию в Google с помощью JSON сервисного аккаунта (вы добавляете этот JSON при настройке расширения). После того как токен OAuth будет получен, прокси-сервер API сможет использовать его для вызовов API Google, фактически вызывая API от имени сервисного аккаунта Google.
Доступ к Google Cloud API фильтруется по областям действия, перечисленным в разделе Области действия OAuth 2.0 для API Google.
Подробнее об использовании OAuth 2.0 для серверных приложений…
Синтаксис
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Пример
В следующем примере действие getOauth2AccessToken расширения получает токен для использования в запросах к Cloud Translation API.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Параметры запроса
| Параметр | Описание | Тип | По умолчанию | Обязательно |
|---|---|---|---|---|
| область действия | Массив областей действия OAuth 2.0. Подробнее об областях действия OAuth 2.0 для API Google… | Массив | ["https://www.googleapis.com/auth/cloud-platform"], который предоставляет доступ ко всем API, к которым имеет доступ сервисный аккаунт. |
Нет. |
Ответ
Объект, содержащий токен доступа, его тип и дату истечения срока действия в следующем формате:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Свойства ответа
| Параметр | Описание | По умолчанию | Обязательно |
|---|---|---|---|
| accessToken | Токен доступа OAuth 2.0. | Нет | Да |
| tokenType | Тип токена. | Канал | Да |
| expiresInSec | Количество секунд до истечения срока действия токена. | 3600 | Да |
getJWTAccessToken
Получает токен доступа JSON Web Token (JWT). Вы можете использовать этот токен для аутентификации в API Google, если определение сервиса, который вы хотите вызвать, опубликовано в репозитории API Google на GitHub.
Некоторые API Google позволяют выполнять авторизованные вызовы API, используя подписанный JWT непосредственно в качестве токена носителя, а не токена доступа OAuth 2.0. Если это возможно, вы можете избежать отправки сетевого запроса на сервер авторизации Google перед вызовом API.
Подробнее о том, как выполнить аутентификацию с помощью токена доступа JWT, см. в разделе Использование OAuth 2.0 для серверных приложений.
Синтаксис
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Пример URL функции Cloud Functions
В следующем примере действие getOauth2AccessToken расширения получает токен для использования в запросах к Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Пример: идентификатор клиента, защищенный Cloud IAP
В следующем примере действие getOauth2AccessToken расширения получает токен для использования в запросах к Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Параметры запроса
| Параметр | Описание | По умолчанию | Обязательно |
|---|---|---|---|
| audience | Ожидаемый получатель токена. Это может быть идентификатор клиента, защищенный Cloud IAP, URL Cloud Functions и т. д. | Нет | Да |
Ответ
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Свойства ответа
| Параметр | Описание | По умолчанию | Обязательно |
|---|---|---|---|
| accessToken | Токен доступа. | Нет | Да |
| tokenType | Тип токена. | Канал | Да |
| expiresInSec | Срок действия в секундах. | 3600 | Да |
Ссылка на конфигурацию
При настройке и развертывании этого расширения для использования в прокси API следуйте приведенным ниже инструкциям. Инструкции по настройке расширения с помощью консоли Apigee приведены в разделе Добавление и настройка расширения.
Общие свойства расширений
Следующие свойства присутствуют для каждого расширения.
| Свойство | Описание | По умолчанию | Необходимый |
|---|---|---|---|
name | Имя, которое вы даете этой конфигурации расширения. | Никто | Да |
packageName | Имя пакета расширения, предоставленное Apigee Edge. | Никто | Да |
version | Номер версии пакета расширения, из которого вы настраиваете расширение. | Никто | Да |
configuration | Значение конфигурации, относящееся к добавляемому расширению. См. Свойства этого пакета расширения. | Никто | Да |
Свойства пакета расширения
Укажите значения для следующих свойств конфигурации, относящихся к этому расширению.
| Свойство | Описание | По умолчанию | Обязательно |
|---|---|---|---|
| учетные данные | При вводе в консоли Apigee Edge это все содержимое JSON-файла ключа сервисного аккаунта. При отправке через API управления это значение, закодированное по алгоритму Base64, генерируется на основе всего JSON-файла ключа сервисного аккаунта. | Нет | Да |