查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
資源擁有者密碼 (或稱「密碼」) 授權類型最常用於應用程式 是極值得信賴的在這項設定中,使用者會提供資源伺服器憑證 (使用者名稱/密碼) 傳送至用戶端應用程式,應用程式會在存取權杖要求中將存取權杖要求傳送至 Apigee 邊緣識別資訊伺服器會驗證憑證,如果憑證有效,Edge 會繼續建立 然後將存取權杖傳回應用程式。
關於這個主題
本主題提供 OAuth 2.0 資源擁有者密碼的一般說明和總覽 授予類型流程,並討論如何在 Apigee Edge 上實作此流程。
可能對您有幫助的例子
- 提出要求 accesstoken (存取權杖):密碼授權類型:說明如何建立權杖要求、設定 密碼授權類型的 OAuthV2 政策,以及如何在 邊緣
- 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 必須知道 發出要求的用戶端應用程式是有效且可信任的應用程式。其中一個做法是使用 API 金鑰驗證機制。在某些情況下,建議您同時驗證用戶端金鑰 和祕密以 Proxy 範例為例,這個 Proxy 範例可以說明 GitHub 上的 api-platform-samples 存放區。
4. 邊緣會處理 登入憑證
用戶端應用程式通過驗證後,您可以使用服務呼叫或 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 呼叫傳遞至目標資源伺服器。存取權杖 會透過 Authorization 標頭傳遞。例如:
$ curl -H "Authorization: Bearer I6daIgMSiUgYX1K2qgQWPi37ztS6 " http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282