Включите получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя, идентификатору приложения или обоим этим параметрам.

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

В этом разделе рассказывается, как включить получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя, идентификатору приложения или обоим этим параметрам. Для работы функции идентификатора конечного пользователя требуется специальная настройка, описанная в этой статье. Под конечным пользователем мы подразумеваем пользователя приложения, которое вызывает API.

Когда следует разрешать доступ к идентификаторам конечных пользователей

Иногда полезно хранить идентификатор пользователя в токене доступа. Включайте доступ к идентификатору конечного пользователя, только если у вас есть для этого веские причины. Пример:

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

О токенах доступа OAuth

Идентификаторы приложений автоматически добавляются в токен доступа OAuth. Поэтому после того, как вы включите доступ к токену для организации, как описано ниже, вы сможете отзывать токены доступа по идентификатору приложения.

Чтобы получать и отзывать токены доступа OAuth 2.0 по идентификатору конечного пользователя, этот идентификатор должен присутствовать в токенах доступа. Ниже описано, как добавить идентификатор конечного пользователя в существующий токен.

По умолчанию, когда Edge генерирует токен доступа OAuth 2.0, он имеет формат, показанный ниже:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Обратите внимание:

  • Поле application_name содержит UUID приложения, связанного с токеном. Если вы включили получение и отзыв токенов доступа OAuth 2.0 по идентификатору приложения, используйте именно этот идентификатор.
  • Поле access_token содержит значение токена доступа OAuth 2.0.

В токене доступа OAuth по умолчанию нет поля для идентификатора конечного пользователя. Чтобы разрешить получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя, необходимо настроить правила OAuth 2.0 так, чтобы идентификатор пользователя включался в токен. Инструкции приведены ниже. Обратите внимание, что если вы хотите получать и отзывать токены доступа OAuth 2.0 по идентификатору приложения, то включать доступ по идентификатору конечного пользователя не нужно.

Вы передаете идентификатор конечного пользователя в конечную точку создания токена. Вы можете передать идентификатор конечного пользователя в виде параметра запроса, параметра формы или в заголовке (как описано ниже). После того как вы настроите Edge так, чтобы в токен включался идентификатор конечного пользователя, он будет добавлен в поле app_enduser, как показано ниже:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "app_enduser" : "6ZG094fgnjNf02EK",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Чтобы узнать, как выполнять вызовы API для получения и отзыва токенов, ознакомьтесь со следующими документами Smart Docs:

Включить доступ к токенам OAuth 2.0 по идентификатору пользователя и приложения.

Способ включения доступа к токенам OAuth 2.0 по идентификатору пользователя и идентификатору приложения зависит от того, как вы развернули Edge:

  • Развертывание на основе облачных технологий

    При облачном развертывании Edge большинство настроек выполняется Apigee. Вы отвечаете только за настройку правила OAuth 2.0 для добавления идентификатора пользователя в токен доступа. Подробные сведения можно найти ниже.

  • Развертывание Edge для частного облака

    В Apigee Edge для частного облака (локальной версии) вы несете полную ответственность за конфигурацию. Подробнее об операциях и конфигурации…

  • Apigee Hybrid

    Доступ к токенам OAuth 2.0 по идентификатору пользователя включен по умолчанию. Вы отвечаете только за настройку правила OAuth 2.0 для добавления идентификатора пользователя в токен доступа. Подробнее об этом рассказывается в шаге 5.

Как включить доступ в облаке

Шаг 1. Включите поддержку этой функции в организации

Эту функцию необходимо включить для каждой организации, в которой вы хотите ее использовать.

Обратитесь в службу поддержки Apigee Edge, чтобы они обновили вашу организацию.

Шаг 2. Предоставьте разрешения на доступ к ресурсам OAuth2 ролям opsadmin и orgadmin

Только пользователям с ролями администратора организации и администратора операций следует предоставить разрешения на выполнение вызовов для получения (get) и отзыва (put) ресурса oauth2 на основе идентификатора конечного пользователя или приложения.

Чтобы узнать, какие роли имеют разрешения get и put для ресурса oauth2, можно использовать вызов API Get Permission for a Resource.

Если вам нужно добавить или удалить какие-либо разрешения, обратитесь в службу поддержки Apigee Edge.

Шаг 3. Скопируйте существующие токены доступа OAuth 2.0 в узлы Cassandra

Выполняется службой поддержки Apigee. В рамках этой задачи копии существующих токенов доступа OAuth 2.0 в затронутых организациях будут скопированы и сохранены в узлах Cassandra. Эта процедура будет выполнена на узлах Cassandra для каждого из ваших контейнеров Apigee Edge. Это позволит выполнять вызовы API для получения и отзыва всех ваших токенов доступа OAuth 2.0, как существующих, так и недавно созданных.

Шаг 4. Настройте правило OAuth 2.0 для создания токенов доступа, включающих идентификаторы конечных пользователей

Настройте правило OAuth 2.0, используемое для создания токенов доступа, чтобы в токен включался идентификатор конечного пользователя. Если включить идентификаторы конечных пользователей в токены доступа, вы сможете выполнять поиск и отмену по идентификатору конечного пользователя.

Чтобы настроить правило для включения идентификатора конечного пользователя в токен доступа, необходимо указать входную переменную, содержащую идентификатор конечного пользователя. Используйте тег <AppEndUser>, чтобы указать переменную.

Приведенные ниже правила OAuth 2.0 с названием GenerateAccessTokenClient генерируют токен доступа OAuth 2.0. Обратите внимание на добавление тега <AppEndUser>, выделенного полужирным шрифтом:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
  <DisplayName>OAuth 2.0.0 1</DisplayName>
  <ExternalAuthorization>false</ExternalAuthorization>
  <Operation>GenerateAccessToken</Operation>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
  <GrantType>request.queryparam.grant_type</GrantType>
  <AppEndUser>request.header.appuserID</AppEndUser>
  <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

Затем вы можете использовать следующую команду cURL, чтобы сгенерировать токен доступа OAuth 2.0, передав идентификатор пользователя в качестве заголовка appuserID:

curl -H "appuserID:6ZG094fgnjNf02EK" /
  https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials /
  -X POST /
  -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNi87GYXFmP&client_secret=gk58jK5lIp943AY4'

В этом примере appuserID передается в качестве заголовка запроса. Существует множество способов передавать информацию в составе запроса. Например, вы можете:

  • Используйте переменную параметра формы: request.formparam.appuserID.
  • Используйте переменную потока, содержащую идентификатор конечного пользователя.