Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Версия: 2.0.2
Для доступа к указанным вами API Google необходимо пройти аутентификацию в Google.
Используйте это расширение для получения токена (OAuth или JWT) для сервисов Google Cloud, а затем используйте этот токен для последующих вызовов API Google, например, с помощью политики 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 IAM) в консоли Google Cloud, чтобы предоставить роли участнику проекта, которого представляет это расширение.
При настройке этого расширения используйте JSON-ключ учетной записи службы этого участника.
При настройке политики ExtensionCallout для использования этого расширения запрашивайте аутентификацию только для тех ресурсов, к которым имеет доступ участник вашего проекта.
Образцы
Следующие примеры иллюстрируют, как выполнить аутентификацию в Google Cloud с помощью политики ExtensionCallout .
Получите токен доступа
В следующем примере действие getOauth2AccessToken расширения извлекает токен для использования в запросах к API Cloud Translation .
<?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-прокси демонстрирует, как установить и использовать кэшированный токен для вызова API Google Translation с политикой 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 в качестве области действия токена. 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.
Доступ к API Google Cloud осуществляется посредством фильтрации в соответствии с областями действия, указанными в описании областей действия OAuth 2.0 для API Google .
Для получения дополнительной информации о взаимодействии между серверами с использованием OAuth 2.0 см. раздел «Использование OAuth 2.0 для приложений, работающих в режиме «сервер-сервер»».
Синтаксис
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Пример
В следующем примере действие getOauth2AccessToken расширения извлекает токен для использования в запросах к API Cloud Translation .
<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 | Да |
получитьJWTAccessToken
Получает токен доступа в формате JSON Web Token (JWT). Вы можете использовать этот токен для аутентификации в API Google, если для вызываемого вами API существует определение сервиса, опубликованное в репозитории Google APIs на GitHub .
В некоторых API Google можно выполнять авторизованные вызовы API, используя подписанный JWT непосредственно в качестве токена доступа, а не токен доступа OAuth 2.0. В таких случаях можно избежать необходимости отправлять сетевой запрос на сервер авторизации Google перед выполнением вызова API.
Для получения дополнительной информации об аутентификации с помощью токена доступа JWT см. раздел «Использование OAuth 2.0 для приложений, работающих между серверами» .
Синтаксис
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Пример: URL облачной функции
В следующем примере действие getOauth2AccessToken расширения извлекает токен для использования в запросах к API Cloud Translation .
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Пример: Идентификатор клиента, защищенный с помощью Cloud IAP.
В следующем примере действие getOauth2AccessToken расширения извлекает токен для использования в запросах к API Cloud Translation .
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Параметры запроса
| Параметр | Описание | По умолчанию | Необходимый |
|---|---|---|---|
| аудитория | Предполагаемый получатель токена. Это может быть идентификатор клиента, защищенный 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-файла ключа учетной записи службы. | Никто | Да |