您正在查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本節說明如何依使用者 ID、應用程式 ID 或兩者同時,啟用 OAuth 2.0 存取權杖的擷取和撤銷功能。如需瞭解使用者 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」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 呼叫來執行這些擷取和撤銷作業,請參閱下列 Smart Docs:
依使用者 ID 和應用程式 ID 啟用 OAuth 2.0 權杖存取權
如何透過使用者 ID 和應用程式 ID 啟用 OAuth 2.0 權杖存取權,取決於您部署 Edge 的方式:
雲端式部署
雲端式 Edge 部署代表大部分設定由 Apigee 處理。您只需要設定 OAuth 2.0 政策,將使用者 ID 新增至存取權憑證。詳情請參閱下方程序。
Edge for Private Cloud 部署
在私有雲 (內部部署環境) 適用的 Apigee Edge 中,您必須自行負責設定。詳情請參閱「作業和設定」。
Apigee Hybrid
根據預設,系統會啟用使用者 ID 的 OAuth 2.0 權杖存取權。您只需要設定 OAuth 2.0 政策,將使用者 ID 新增至存取權憑證。詳情請參閱下方步驟 5。
啟用雲端存取權
步驟 1:啟用支援這項功能的機構
您必須為每個要支援這項功能的機構啟用這項功能。
請與 Apigee Edge 支援團隊聯絡,要求他們更新貴機構。
步驟 2:為 opsadmin 和 orgadmin 角色提供 oauth2 資源權限
只有 orgadmin 和 opsadmin 角色可取得權限,根據使用者 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 節點上執行。這麼做可讓擷取和撤銷 API 呼叫針對所有 OAuth 2.0 存取權杖 (現有和新產生的) 執行。
步驟 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 的流程變數