Edge for Private Cloud v4.19.01
本文档介绍了如何按最终用户 ID 和/或应用 ID 检索和撤消 OAuth 2.0 访问令牌。
应用 ID 会自动添加到 OAuth 访问令牌中。因此,在使用下面的过程为组织启用令牌访问权限后,您可以按应用 ID 访问令牌。
如需按最终用户 ID 检索和撤消 OAuth 2.0 访问令牌,访问令牌中必须包含最终用户 ID。以下步骤介绍了如何将最终用户 ID 添加到现有令牌或新令牌。
默认情况下,当 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。如果您按应用 ID 启用了 OAuth 2.0 访问令牌的检索和撤消,那么这就是您使用的应用 ID。access_token
字段包含 OAuth 2.0 访问令牌值。
如需启用按最终用户 ID 检索和撤消 OAuth 2.0 访问令牌的功能,请将 OAuth 2.0 政策配置为在令牌中包含用户 ID,如下文所述。
最终用户 ID 是 Edge 用作开发者 ID 的字符串,而不是开发者的电子邮件地址。您可以使用 Get Developer API 调用,根据开发者的电子邮件地址确定开发者的 ID。
将 Edge 配置为在令牌中包含最终用户 ID 后,该 ID 会作为 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" }
用于按用户 ID 和应用 ID 检索和撤消 OAuth 2.0 访问令牌的 API
使用以下 API,按用户 ID 和/或应用 ID 访问 OAuth 令牌:
启用令牌访问权限的过程
按照以下步骤操作,支持按最终用户 ID 和应用 ID 检索和撤消 OAuth 2.0 访问令牌。
第 1 步:为组织启用令牌访问令牌支持
您必须分别为每个组织启用令牌访问权限。针对您希望允许按最终用户 ID 或应用 ID 检索和撤消 OAuth 2.0 访问令牌的每个组织,调用下面的 PUT API。
进行以下调用的用户必须具有组织的 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
角色授予根据用户 ID 或应用 ID 检索 (HTTP GET) 和撤消 (HTTP PUT) OAuth 2.0 令牌的权限。如需控制访问权限,请为组织的 /oauth2 资源设置获取和放置权限。该资源的网址采用以下格式:
https://management_server_IP:8080/v1/organizations/org_name/oauth2
orgadmin
角色应已具有必要的权限。对于 /oauth2 资源的 opsadmin
角色,权限应如下所示:
<ResourcePermission path="/oauth2"> <Permissions> <Permission>get</Permission> <Permission>put</Permission> </Permissions> </ResourcePermission>
您可以使用获取单个资源 API 的权限调用来查看哪些角色具有 /oauth2
资源的权限。
根据响应,您可以使用向角色添加资源权限和 删除资源权限 API 调用对 /oauth2 资源权限进行必要的调整。
使用以下 curl
命令向 opsadmin
角色授予 /oauth2
资源的 get
权限和 put
权限。请将 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
命令撤消 orgadmin
和 opsadmin
以外的角色对 /oauth2
资源的 get
和 put
权限。将 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 属性
确保 /opt/apigee/customer/application/management-server.properties
文件中的 conf_keymanagement_oauth_max_search_limit
属性设置为 100:
conf_keymanagement_oauth_max_search_limit = 100
如果此文件不存在,请创建一个。
此属性可设置提取令牌时使用的页面大小。Apigee 建议的值为 100,但您可以根据需要进行设置。
首次安装时,此属性应已设置为 100。如果必须更改此属性的值,请使用以下命令重启管理服务器和消息处理器:
/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 政策,以生成包含最终用户 ID 的令牌
配置用于生成访问令牌的 OAuth 2.0 政策,以将最终用户 ID 包含在令牌中。通过在访问令牌中包含最终用户 ID,您可以按 ID 检索和撤消令牌。
如需将政策配置为在访问令牌中包含最终用户 ID,则创建访问令牌的请求必须包含最终用户 ID,并且您必须指定包含最终用户 ID 的输入变量。
下面的 OAuth 2.0 政策(名为 GenerateAccessTokenClient)会生成 OAuth 2.0 访问令牌。请注意,我们以粗体添加了 <AppEndUser>
标记,用于指定包含最终用户 ID 的变量:
<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 访问令牌,并将用户 ID 作为 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
- 使用提供最终用户 ID 的流变量