Расширение аутентификации Google

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Версия: 1.0.2

Пройдите аутентификацию в Google для доступа к указанным вами API Google .

Используйте это расширение, чтобы получить токен (OAuth или JWT) для сервисов Google Cloud, а затем использовать этот токен для последующих вызовов API Google, например, с помощью политики ServiceCallout .

Например, в прокси-сервере API вы можете получить токен с этим расширением, кэшировать токен с помощью политики PopulateCache , а затем передать токен через политику ServiceCallout для доступа к сервисам Google Cloud из потока прокси-сервера API.

Предварительные условия

Этот контент содержит информацию по настройке и использованию этого расширения. Прежде чем использовать расширение из API-прокси с помощью политики ExtensionCallout , необходимо:

  1. Убедитесь, что учетная запись, которую будет использовать расширение (учетная запись, представленная учетной записью службы, которую вы будете использовать для учетных данных), имеет доступ к сервисам Google Cloud, с которыми расширение будет аутентифицироваться.

  2. Используйте Google Cloud Console для создания ключа для сервисного аккаунта .

  3. Используйте содержимое полученного JSON-файла ключа учетной записи службы при добавлении и настройке расширения с помощью справочника по настройке .

Об аутентификации в Google Cloud

Это расширение запрашивает аутентификацию у Google Cloud, представляя конкретного участника, определенного в вашем проекте Google Cloud . При настройке этого расширения вы используете файл JSON сервисного аккаунта этого участника проекта.

В результате это расширение будет иметь доступ только к тем ресурсам, на которые у этого участника есть разрешение. Другими словами, успешная аутентификация с помощью этого расширения зависит от соответствия разрешений, предоставленных в Google Cloud Console, и доступа, запрошенного расширением (через области действия или аудиторию) во время выполнения.

Как правило, ваши шаги для аутентификации для доступа к API из этого расширения будут следующими:

  1. Убедитесь, что учетная запись службы поддержки, которую представляет это расширение, имеет доступ к ресурсу Google, к которому вы хотите получить доступ. Вы можете использовать страницу Cloud Identity and Access Management (Cloud IAM) в Google Cloud Console, чтобы предоставить роли участнику проекта, которого представляет это расширение.

  2. Используйте JSON-ключ сервисной учетной записи этого участника при настройке этого расширения.

  3. При настройке политики 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 показывает, как установить и использовать кэшированный токен для вызова API перевода Google с политикой 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>
  1. Следующая политика 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>
    
  2. Если при поиске в кеше не получается кэшированный токен, следующая политика ExtensionCallout извлекает новый токен OAuth, указывая Google Cloud Translation API в качестве области действия токена. 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>
    
  3. После того как политика 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 расширения извлекает токен для использования в запросах к 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
}

Свойства ответа

Параметр Описание По умолчанию Необходимый
токен доступа Токен доступа OAuth 2.0. Никто Да
тип токена Тип токена. Носитель Да
истекаетInSec Количество секунд до истечения срока действия токена. 3600 Да

получитьJWTAAccessToken

Получает токен доступа веб-токена JSON (JWT). Вы можете использовать этот токен для аутентификации в API Google, если API, который вы хотите вызвать, имеет определение службы, опубликованное в репозитории 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-адрес облачной функции

В следующем примере действие 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>

Параметры запроса

Параметр Описание По умолчанию Необходимый
аудитория Предполагаемый получатель токена. Сюда может входить идентификатор клиента, защищенный Cloud IAP, URL-адрес облачных функций и т. д. Никто Да

Ответ

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

Свойства ответа

Параметр Описание По умолчанию Необходимый
токен доступа Токен доступа. Никто Да
тип токена Тип токена. Носитель Да
истекаетInSec Срок действия в секундах. 3600 Да

Справочник по конфигурации

Используйте следующее при настройке и развертывании этого расширения для использования в прокси-серверах API. Инструкции по настройке расширения с помощью консоли Apigee см. в разделе Добавление и настройка расширения .

Общие свойства расширения

Следующие свойства присутствуют для каждого расширения.

Свойство Описание По умолчанию Необходимый
name Имя, которое вы даете этой конфигурации расширения. Никто Да
packageName Имя пакета расширения, предоставленное Apigee Edge. Никто Да
version Номер версии пакета расширения, из которого вы настраиваете расширение. Никто Да
configuration Значение конфигурации, относящееся к добавляемому расширению. См. Свойства этого пакета расширения. Никто Да

Свойства этого пакета расширений

Укажите значения для следующих свойств конфигурации, специфичных для этого расширения.

Свойство Описание По умолчанию Необходимый
реквизиты для входа При вводе в консоли Apigee Edge это все содержимое JSON-файла ключа вашей учетной записи службы. При отправке через API управления это значение в кодировке Base64, созданное на основе всего JSON-файла ключа учетной записи службы. Никто Да