按照使用者 ID 和應用程式 ID 存取 OAuth 2.0 權杖

Edge for Private Cloud 4.17.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」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 納入權杖後,就會將其新增為 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。

發出以下呼叫的使用者必須是機構的 orgadminopsadmin 角色。將 {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 角色設定權限

請務必僅授予機構中的 orgadminopsadmin 角色,以擷取 (HTTP GET) 及依據使用者 ID 或應用程式 ID 撤銷 (HTTP PUT) OAuth 2.0 權杖。如要控管存取權,請為機構的 /oauth2 資源設定取得權限。這項資源會採用以下形式的網址:

https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2

orgadmin 角色應已具備必要權限。對於 /oauth2 資源的 opsadmin 角色,權限應如下所示:

<ResourcePermission path="/oauth2">
    <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
    </Permissions>
</ResourcePermission>

您可以使用 Get Permission for a Single Resource API 呼叫查看哪些角色具備 /oauth2 資源權限。

根據回應,您可以使用 Add Permissions for Resource to a Role Delete Permission for Resource API 呼叫,對 /oauth2 資源權限進行必要調整。

使用下列 cURL 指令,將 /oauth2 資源的 getput 權限授予 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 指令,針對 /oauth2 資源,從 orgadminopsadmin 以外的角色撤銷「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} 

步驟 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 的輸入變數。

以下名為 GenerateAccessTokenClient 的 OAuth 2.0 政策會產生 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 的流程變數