您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
資源擁有者密碼 (或「密碼」) 授權類型主要在應用程式受到高度信任時使用。在這項設定中,使用者會將資源伺服器憑證 (使用者名稱/密碼) 提供給用戶端應用程式,然後透過存取權杖要求將憑證傳送至 Apigee Edge。身分識別伺服器會驗證憑證,如果憑證有效,Edge 就會繼續挖掘存取權杖,並將權杖傳回應用程式。
關於這個主題
本主題提供 OAuth 2.0 資源擁有者密碼授權類型流程的一般說明與總覽,並探討如何在 Apigee Edge 中實作此流程。
可能對您有幫助的範例
- 要求存取權杖:密碼授權類型:說明如何建立權杖要求、設定 OAuthV2 政策來授予密碼授權類型,以及如何在 Edge 中設定政策端點。
- oauth-validate-key-secret:GitHub 的 Proxy 範例,可部署至 Edge 並試用。這是以密碼授權類型的端對端範例。該範例示範了最佳做法,也就是先驗證用戶端應用程式的憑證 (金鑰/密鑰),然後再將使用者的憑證傳送至識別資訊提供者。
影片
影片: 觀看這部影片,瞭解如何實作密碼授權類型。
應用情境
這種授權類型適用於高度信任或具有特殊權限的應用程式,因為使用者必須在應用程式中提供資源伺服器憑證。應用程式通常會提供登入畫面,讓使用者在該處輸入憑證。
流程圖
下列流程圖說明資源擁有者密碼授權類型流程,以 Apigee Edge 服務做為授權伺服器。
提示:如要查看較大版本的圖表,請按一下滑鼠右鍵,並在新分頁中開啟圖表,或是儲存圖表並在圖片檢視器中開啟。
密碼授權類型流程中的步驟
以下摘要說明實作密碼授權類型 (Apigee Edge 做為授權伺服器) 的必要步驟。
事前準備:用戶端應用程式必須向 Apigee Edge 註冊,才能取得用戶端 ID 和用戶端密鑰。詳情請參閱「註冊用戶端應用程式」。
1. 使用者啟動流程並輸入憑證
如果應用程式需要存取使用者的受保護資源 (例如使用者在應用程式中點選按鈕),系統會將使用者重新導向至登入表單。
2. 應用程式向 Apigee Edge 要求存取權杖
應用程式會將存取權杖要求 (包括使用者憑證) 傳送至 Apigee Edge 上的 GenerateAccessToken 端點。
以下是 POST 要求的範例,其中包含這個授權類型的必要參數:
$ curl -i \ -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -d 'grant_type=password&username=the-user-name&password=the-users-password' \ https://docs-test.apigee.net/oauth/token
或者,該指令也可以如下所示使用 -u 選項以 curl 為您建立採用 Base64 編碼的基本驗證標頭。
$ curl -i \ -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ -u sqH8ooHexTz8C02IX9ORo6rhgq1iSrAl:Z4ljtJdneBOjPMAU \ -d 'grant_type=password&username=the-user-name&password=the-users-password' \ https://docs-test.apigee.net/oauth/token
(這些指令應全部在同一行列出)。
使用者憑證包含在表單參數中,而用戶端憑證則是在 HTTP 基本驗證標頭中編碼。如需這項 API 呼叫的詳細說明,包括必要基本驗證標頭的詳細資料,請參閱「要求存取權杖和授權碼」中的「密碼授權」一節。
3. Edge 會驗證用戶端應用程式
Edge 必須先知道發出要求的用戶端應用程式是可信任的有效應用程式,然後再將使用者的使用者名稱和密碼傳送給識別資訊提供者。方法很簡單,只要對 API 呼叫使用 API 金鑰驗證即可。在某些情況下,您可能會想驗證用戶端金鑰和密鑰。 GitHub 上的 api-platform-samples 存放區中提供了範例 Proxy 來說明這個聯合技術。
4. Edge 會處理登入憑證
用戶端應用程式通過驗證後,您就可以使用服務呼叫或 JavaScript 政策呼叫身分服務,並傳送使用者的憑證。舉例來說,它可以是 LDAP 服務,或者您想用來驗證憑證的任何服務。如要進一步瞭解這些政策,請參閱「擷取變數政策」和「JavaScript 政策」。
如果身分識別服務驗證憑證並傳回 200 回應,Edge 會繼續處理要求,否則 Edge 會停止處理要求,並將錯誤傳回用戶端應用程式。
5. 系統會執行 OAuthV2 政策
如果憑證有效,下一步就會執行為密碼授權類型設定的 OAuthV2 政策。我們來看個例子您必須有 <UserName> 和 <PassWord> 元素,且可以從透過 ExtractVariables 政策儲存的流程變數中擷取這些元素。如要進一步瞭解這項政策的參考資料,請參閱 OAuthV2 政策。
<OAuthV2 name="GetAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>360000000</ExpiresIn> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <UserName>login</UserName> <PassWord>password</PassWord> <GenerateResponse/> </OAuthV2>
如果這項政策成功,系統會產生回應給包含存取權杖的用戶端。回應採用 JSON 格式。舉例來說,請注意,access_token 是其中一個元素:
{ "issued_at": "1420258685042", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420258685042", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6", "organization_name": "docs", "refresh_token_expires_in": "0", "refresh_count": "0" }
6. 用戶端會呼叫受保護的 API
現在,只要具備有效的存取碼,用戶端就能呼叫受保護的 API。在這個情境中,要求會向 Apigee Edge (Proxy) 發出,且 Edge 會負責驗證存取權杖,然後再將 API 呼叫傳送至目標資源伺服器。存取權杖會透過「授權」標頭傳遞。例如:
$ curl -H "Authorization: Bearer I6daIgMSiUgYX1K2qgQWPi37ztS6 " http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282