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

Edge for Private Cloud 4.18.05

本文說明如何依使用者 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 納入權杖後,就會將其新增為 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:為機構啟用權杖存取支援功能

您必須為每個機構分別啟用權杖存取權。針對您要啟用 OAuth 2.0 存取權杖的每個機構,呼叫下列 PUT API,以便透過使用者 ID 或應用程式 ID 擷取及撤銷存取權杖。

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

只有組織中的 orgadminopsadmin 角色,才應具備根據使用者 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>

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

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

使用下列 curl 指令,為 /oauth2 資源授予 opsadmin 角色 getput 權限。將 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 指令,從 orgadminopsadmin 以外的角色撤銷 /oauth2 資源的 getput 權限。將 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 的輸入變數。

以下名為 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 的流程變數