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

本文說明如何依使用者 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 資源的 get 和 put 權限。該資源的網址格式如下:

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 資源的權限。

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

使用下列 curl 指令,為 /oauth2 資源授予 opsadmin 角色 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

Step 3: Set the oauth_max_search_limit property

確認 /opt/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 和 訊息處理器:

/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 的流程變數