适用于私有云的 Edge v. 4.17.01
本文档介绍了如何通过 Google Cloud 控制台检索和撤消 OAuth 2.0 访问令牌, 最终用户 ID 和/或应用 ID。
应用 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。启用检索和撤消 OAuth 2.0 访问令牌数量(按应用 ID),这就是您使用的应用 ID。
- access_token 字段包含 OAuth 2.0 访问令牌值。
要按最终用户 ID 检索和撤消 OAuth 2.0 访问令牌,请配置 OAuth 2.0 政策,将 User-ID 包含在令牌中,如下所述。
最终用户 ID 是 Edge 用作开发者 ID 的字符串,而不是开发者的电子邮件地址 地址。您可以使用“获取” 开发者 API 调用。
将 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" }
用于检索和撤消的 API 按用户 ID 和应用 ID 划分的 OAuth 2.0 访问令牌
使用以下 API 按用户 ID 和/或应用 ID 访问 OAuth 令牌:
启用令牌访问权限的过程
按照以下过程启用 OAuth 2.0 访问令牌的检索和撤消: 最终用户 ID 和应用 ID
第 1 步: 为组织启用令牌访问权限支持
您必须分别为每个组织启用令牌访问权限。针对每个 API 调用下面的 PUT API 您希望为其启用 OAuth 2.0 访问令牌的检索和撤消功能的组织 按最终用户 ID 或应用 ID 过滤。
进行以下调用的用户必须具有 orgadmin 角色或 opsadmin。替换 {curly} 中的值 大括号}替换为贵组织的专属值:
> curl -H "Content-type:text/xml" -X POST \ < htt>ps://ms-ip:8080/v1/organizations/{org_name<} \ -d 'Organization nam>e="<;{org_name>}" < Properties Property name="f>eatu<res.isOAu>thRevokeE<nabled"true/Property Property name=&qu>ot;f<eatures.i>sOAuth2<TokenSearch>Enabl<ed"true/>Property /Properties /Organization' \ -u {userEmail}:{mypassword}
第 2:为组织中的 opsadmin 角色设置权限
仅限组织中的 orgadmin 和 opsadmin 角色 应获得检索 (HTTP GET) 和撤消 (HTTP PUT) OAuth 2.0 令牌的权限, 用户 ID 或应用 ID要控制访问,请为 设置 /oauth2 资源获取和放置权限 组织。该资源的网址采用以下格式:
https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2orgadmin 角色应该已拥有必要的权限。对于 opsadmin 角色,则权限应如下所示: :
<ResourcePermission path="/oa>uth2&<quot;
P>ermission<s
>Per<missionget/>Permissio<n
>Per<missionput/>Permi<ssion
/P>e<rmissions
/Resource>Permission您可以使用获取 单个资源 API 的权限调用,用于确定哪些角色拥有该 API 的 /oauth2 资源。
根据得到的回答,您可以使用添加 为角色分配资源的权限和 删除 Resource API 调用的权限,以便对 /oauth2 进行必要的调整 资源权限。
使用以下 c网址 命令向 opsadmin 角色授予 /oauth2 资源的 get 和 put 权限。替换 {curly 大括号}替换为贵组织的专属值:
> curl -X POST -H 'Content-type:application/xml' \ < http>://ms-ip:8080/v1/organizations/{org}/userroles/opsadmin/permissions <\ -d 'ResourcePermission pa>th=&quo<t;/oauth2&q>uot; < Permissi>ons< Pe>rmissiong<et/Permiss>ion< Pe>rmissio<nput/Permiss>ion < /Permissions > /ResourcePermission' \ -u {USEREMAIL}:{PWD}
使用以下 c网址 命令撤消非以下角色对 /oauth2 资源的 get 和 put 权限: orgadmin 和 opsadmin。替换 {curly} 中的值 大括号}替换为贵组织的专属值:
> curl -X DELETE -H 'Content-type:application/xml' \ < htt>p://msip:8080/v1/organizations/{org-name}/userroles/{roles}/permissions <\ -d 'ResourcePermission pa>th=&quo<t;/oauth2&q><uot; P>ermis<sions/Permissions > /ResourcePermission' \ -u {USEREMAIL}:{PWD}
第 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。如果您必须更改 此属性的值,请使用 命令:
> /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。
下面名为 GenerateAccessTokenClient 的 OAuth 2.0 政策会生成 OAuth 2.0 访问权限 令牌。请注意,上述代码中添加了以粗体显示的 <AppEndUser> 标记,用于指定 包含最终用户 ID 的变量:
<OAuthV2 async="false" continueOnError="false" enabled="true" na>me=&q<uot;Generat>eAccessTokenC<lient"<>/span> D<isplayNameOAuth 2.0.0> 1/Di<splayName External>Autho<rizationf>alse/ExternalAuthor<ization > Ope<rationGenerateAcces>sToken/Ope<ration > SupportedGrantTy<pes > Gr<antTypeclient_creden>tials</GrantType /SupportedGrantTy>pes < Genera>teResponse enabled="true<"/ > Gran<tTypereque>st.queryparam.grant_type</GrantType > A<ppEndUser>reques<t.header.a>p<puserID/>AppEndUser ExpiresIn960000/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=k3nJyFJIA3p62&TKIkLO6OJNXFmPclient_secret=gk5K5lIp943AY4'
在此示例中,appuserID 作为请求标头传递。您可以采用多种方法将信息作为请求的一部分进行传递。对于 例如,您可以:
- 使用表单参数变量:request.formparam.appuserID
- 使用提供最终用户 ID 的流变量