Edge for Private Cloud 4.19.01
В этом документе описывается, как включить получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя, идентификатору приложения или обоим идентификаторам.
Идентификаторы приложений автоматически добавляются в токен доступа 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", "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", "refresh_count" : "0" }
Обратите внимание:
- Поле
application_nameсодержит UUID приложения, связанного с токеном. Если вы включите получение и отзыв токенов доступа OAuth 2.0 по идентификатору приложения, будет использоваться именно этот идентификатор. - Поле
access_tokenсодержит значение токена доступа OAuth 2.0.
Чтобы включить получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя, настройте правило OAuth 2.0, чтобы включить идентификатор пользователя в токен, как описано в процедуре ниже.
Идентификатор конечного пользователя – это строка, которую Edge использует в качестве идентификатора разработчика, а не адрес электронной почты разработчика. Идентификатор разработчика можно определить по его адресу электронной почты с помощью вызова API Get Developer.
После того как вы настроите 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", "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", "refresh_count" : "0" }
API для получения и отзыва токенов доступа OAuth 2.0 по идентификатору пользователя и приложения.
Чтобы получить доступ к токенам OAuth по идентификатору пользователя, идентификатору приложения или обоим идентификаторам, используйте следующие API:
- Получение токена доступа OAuth 2.0 по идентификатору конечного пользователя или приложения
- Отзыв токена доступа OAuth 2.0 по идентификатору конечного пользователя или приложения
Как включить доступ по токену
Чтобы включить получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя и идентификатору приложения, выполните следующие действия:
Шаг 1. Включите поддержку доступа с помощью токенов для организации
Доступ по токену нужно включить для каждой организации отдельно. Вызовите указанный ниже PUT API для каждой организации, в которой вы хотите включить получение и отзыв токенов доступа OAuth 2.0 по идентификатору конечного пользователя или приложения.
Пользователь, выполняющий следующий вызов, должен иметь роль orgadmin или opsadmin в организации. Замените values значениями, относящимися к вашей организации:
curl -H "Content-type:text/xml" -X POST \
https://management_server_IP;:8080/v1/organizations/org_name \
-d '<Organization name="org_name">
<Properties>
<Property name="features.isOAuthRevokeEnabled">true</Property>
<Property name="features.isOAuth2TokenSearchEnabled">true</Property>
</Properties>
</Organization>' \
-u USER_EMAIL:PASSWORDШаг 2. Настройте разрешения для роли opsadmin в организации
Только ролям orgadmin и opsadmin в организации должны быть предоставлены разрешения на получение (HTTP GET) и отзыв (HTTP PUT) токенов OAuth 2.0 на основе идентификатора пользователя или приложения. Чтобы управлять доступом, задайте разрешения на получение и размещение для ресурса /oauth2 организации. URL этого ресурса имеет следующий формат:
https://management_server_IP:8080/v1/organizations/org_name/oauth2
У роли orgadmin уже должны быть необходимые разрешения. Для роли opsadmin ресурса /oauth2 разрешения должны выглядеть следующим образом:
<ResourcePermission path="/oauth2">
<Permissions>
<Permission>get</Permission>
<Permission>put</Permission>
</Permissions>
</ResourcePermission>Чтобы узнать, у каких ролей есть разрешения на доступ к ресурсу /oauth2, используйте вызов Get Permission for a Single Resource API.
В зависимости от ответа вы можете использовать вызовы API Add Permissions for Resource to a Role и Delete Permission for Resource, чтобы внести необходимые изменения в разрешения ресурса /oauth2.
Чтобы предоставить роль opsadmin (get) и разрешения put для ресурса /oauth2, используйте следующую команду curl: Замените values значениями, относящимися к вашей организации:
curl -X POST -H 'Content-type:application/xml' \
http://management_server_IP:8080/v1/organizations/org_name/userroles/opsadmin/permissions \
-d '<ResourcePermission path="/oauth2">
<Permissions>
<Permission>get</Permission>
<Permission>put</Permission>
</Permissions>
</ResourcePermission>' \
-u USEREMAIL:PASSWORD
Используйте следующую команду curl, чтобы отозвать разрешения get и put для ресурса /oauth2 у ролей, отличных от orgadmin и opsadmin. Замените values значениями, относящимися к вашей организации:
curl -X DELETE -H 'Content-type:application/xml' \
http://management_server_IP:8080/v1/organizations/org_name/userroles/roles/permissions \
-d '<ResourcePermission path="/oauth2">
<Permissions></Permissions>
</ResourcePermission>' \
-u USEREMAIL:PASSWORD
Шаг 3. Настройте свойство oauth_max_search_limit
Убедитесь, что свойство conf_keymanagement_oauth_max_search_limit в файле /opt/apigee/customer/application/management-server.properties имеет значение 100:
conf_keymanagement_oauth_max_search_limit = 100
Если такого файла нет, создайте его.
Это свойство задает размер страницы, используемый при получении токенов. Apigee рекомендует значение 100, но вы можете установить его по своему усмотрению.
При новой установке свойство должно быть установлено на 100. Если вам нужно изменить значение этого свойства, перезапустите Management Server и Message Processor с помощью следующих команд:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restartШаг 4. Настройте правило OAuth 2.0, которое генерирует токены, чтобы включить идентификатор конечного пользователя
Настройте правило OAuth 2.0, используемое для создания токенов доступа, чтобы включить в токен идентификатор конечного пользователя. Если вы включите идентификаторы конечных пользователей в токен доступа, то сможете получать и отзывать токены по идентификатору.
Чтобы настроить правило для включения идентификатора конечного пользователя в токен доступа, запрос, создающий токен доступа, должен включать идентификатор конечного пользователя, и вы должны указать входную переменную, содержащую идентификатор конечного пользователя.
Правило 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=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'
В этом примере appuserID передается в качестве заголовка запроса. Передавать информацию в запросе можно разными способами. Например, вы можете:
- Используйте переменную параметра формы:
request.formparam.appuserID. - Использовать переменную потока, предоставляющую идентификатор конечного пользователя