Edge for Private Cloud 4.16.09 版
本文說明如何依使用者 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 角色。將{curly braces} 中的值替換為貴組織專屬的值:
> curl -H "Content-type:text/xml" -X POST \ https://<ms-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 {userEmail}:{mypassword}
步驟 2:設定組織中 opsadmin 角色的權限
只有組織中的 orgadmin 和 opsadmin 角色,應具備根據使用者 ID 或應用程式 ID 擷取 (HTTP GET) 和撤銷 (HTTP PUT) OAuth 2.0 權杖的權限。如要控管存取權,請為機構設定 /oauth2 資源的 get 和 put 權限。該資源的網址格式如下:
https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2orgadmin 角色應已具備必要權限。/oauth2 資源的 opsadmin 角色權限應如下所示:
<ResourcePermission path="/oauth2">
<Permissions>
<Permission>get</Permission>
<Permission>put</Permission>
</Permissions>
</ResourcePermission>您可以使用取得單一資源 API 的權限呼叫,查看哪些角色具有 /oauth2 資源的權限。
根據回應,您可以使用「Add Permissions for Resource to a Role」和「 Delete Permission for Resource」API 呼叫,對 /oauth2 資源權限進行任何必要調整。
使用下列 cURL 指令,將 /oauth2 資源的 get 和 put 權限授予 opsadmin 角色。將{curly braces} 中的值替換為貴機構專屬的值:
> curl -X POST -H 'Content-type:application/xml' \ http://<ms-ip>:8080/v1/organizations/{org}/userroles/opsadmin/permissions \ -d '<ResourcePermission path="/oauth2"> <Permissions> <Permission>get</Permission> <Permission>put</Permission> </Permissions> </ResourcePermission>' \ -u {USEREMAIL}:{PWD}
使用下列 cURL 指令,撤銷 orgadmin 和 opsadmin 以外角色的 /oauth2 資源 get 和 put 權限。將{curly braces} 中的值替換為貴組織專屬的值:
> curl -X DELETE -H 'Content-type:application/xml' \ http://<msip>:8080/v1/organizations/{org-name}/userroles/{roles}/permissions \ -d '<ResourcePermission path="/oauth2"> <Permissions></Permissions> </ResourcePermission>' \ -u {USEREMAIL}:{PWD}
Step 3: Set the oauth_max_search_limit property
確認 /<inst_dir>/apigee/customer/application/management-server.properties 檔案中的 conf_keymanagement_oauth_max_search_limit 屬性設為 100:
conf_keymanagement_oauth_max_search_limit = 100
如果這個檔案不存在,請建立檔案。
這項屬性會設定擷取權杖時使用的頁面大小。Apigee 建議設為 100,但您可視需求調整。
如果是新安裝,這項屬性應已設為 100。如要變更這項屬性的值,請使用下列指令重新啟動 Management Server 和 訊息處理器:
> /<inst_rt>/apigee/apigee-service/bin/apigee-service edge-management-server restart > /<inst_rt>/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 的流程變數