您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本節說明如何啟用 OAuth 2.0 存取權杖的擷取和撤銷功能,並依使用者 ID、應用程式 ID 或兩者進行操作。如本主題所述,使用者 ID 功能需要特別設定。所謂「使用者」,是指呼叫 API 的應用程式使用者。
何時啟用使用者 ID 存取權
有時,將使用者 ID 儲存在存取權杖中會很有用。只有在有適當的用途時,才啟用使用者 ID 存取權功能。例如:
- 網站或應用程式的功能,可讓使用者查看已授權的第三方應用程式,並提供撤銷這些應用程式存取權的選項。
- 這項功能可讓授權使用者撤銷與特定開發人員應用程式相關聯的所有存取權杖。
關於 OAuth 存取權杖
應用程式 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", //--in seconds "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", //--in seconds "refresh_count" : "0" }
注意事項:
- application_name 欄位包含與權杖相關聯的應用程式 UUID。如果您啟用依應用程式 ID 擷取及撤銷 OAuth 2.0 存取權杖的功能,則會使用這個應用程式 ID。
- access_token 欄位包含 OAuth 2.0 存取權杖值。
預設 OAuth 存取權杖中沒有使用者 ID 欄位。如要讓使用者 ID 能夠擷取及撤銷 OAuth 2.0 存取權杖,請按照下列程序設定 OAuth 2.0 政策,在權杖中加入使用者 ID。請注意,如果只想依應用程式 ID 擷取及撤銷 OAuth 2.0 存取權杖,則不需要啟用依使用者 ID 存取。
您會將使用者 ID 傳遞至權杖建立端點。您可以將使用者的 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", //--in seconds "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", //--in seconds "refresh_count" : "0" }
如要瞭解如何發出 API 呼叫來執行這些擷取和撤銷作業,請參閱下列智慧文件:
依使用者 ID 和應用程式 ID 啟用 OAuth 2.0 權杖存取權
您啟用使用者 ID 和應用程式 ID 的 OAuth 2.0 權杖存取權時,取決於 Edge 的部署方式:
雲端部署
在雲端部署 Edge 時,大部分的設定都是由 Apigee 處理。您只需負責設定 OAuth 2.0 政策,將使用者 ID 新增至存取權杖。詳情請參閱下文程序。
Edge for Private Cloud 部署作業
在 Apigee Edge for Private Cloud (地端部署) 中,您完全負責設定。詳情請參閱「作業和設定」。
Apigee Hybrid
系統預設會啟用依使用者 ID 存取 OAuth 2.0 權杖的功能。您只需負責設定 OAuth 2.0 政策,將使用者 ID 新增至存取權杖。詳情請參閱下方的步驟 5。
在雲端啟用存取權
步驟 1:啟用機構,支援這項功能
如要支援這項功能,請務必為每個機構啟用這項功能。
請與 Apigee Edge 支援團隊聯絡,要求他們更新機構。
步驟 2:為 opsadmin 和 orgadmin 角色提供 oauth2 資源權限
只有機構管理員和作業管理員角色,才能根據使用者 ID 或應用程式 ID,對 oauth2 資源發出這些擷取 (get) 和撤銷 (put) 呼叫。
您可以透過「Get Permission for a Resource」(取得資源的權限) API 呼叫,查看哪些角色具有 oauth2 資源的 get 和 put 權限。
如要新增或移除任何權限,請聯絡 Apigee Edge 支援團隊,請他們執行更新。
步驟 3:將現有的 OAuth 2.0 存取權杖複製到 Cassandra 節點
由 Apigee 支援團隊執行:在這項工作中,受影響機構中現有的 OAuth 2.0 存取權杖副本會複製並儲存在 Cassandra 節點中。這項程序會針對每個 Apigee Edge Pod 的 Cassandra 節點執行。這樣一來,您就能針對所有 OAuth 2.0 存取權杖 (包括現有和新產生的權杖),執行擷取和撤銷 API 呼叫。
步驟 4:設定 OAuth 2.0 政策,產生包含使用者 ID 的存取權杖
設定用於產生存取權杖的 OAuth 2.0 政策,在權杖中加入使用者 ID。在存取權杖中加入使用者 ID 後,您就能依使用者 ID 執行擷取和撤銷作業。
如要設定政策,在存取權杖中加入使用者 ID,您必須指定包含使用者 ID 的輸入變數。使用 <AppEndUser> 標記指定變數。
以下名為 GenerateAccessTokenClient 的 OAuth 2.0 政策會產生 OAuth 2.0 存取權杖。請注意,粗體字部分新增了 <AppEndUser> 標記:
<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=k3nJyFJIA3p62TKIkLO6OJNi87GYXFmP&client_secret=gk58jK5lIp943AY4'
在本範例中,appuserID 會做為要求標頭傳遞。您可以透過多種方式,在要求中傳遞資訊。舉例來說,您可以改用下列方式:
- 使用表單參數變數:request.formparam.appuserID
- 使用提供使用者 ID 的流程變數