按照使用者 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 的字串,而非開發人員的電子郵件地址。您可以使用取得 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。

進行以下呼叫的使用者必須是機構中的 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 資源設定 get 和放置權限。該資源的網址格式如下:

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>

您可以使用「取得 Single Resource API 的權限」呼叫,查看哪些角色具備 /oauth2 資源的權限。

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

使用以下的 curl 指令為 opsadmin 授予 getput 資源的權限。/oauth2請將 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:設定用來產生憑證以納入使用者 ID 的 OAuth 2.0 政策

設定用來產生存取權杖的 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 的流程變數