查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
課程內容
- 下載及部署範例 API Proxy。
- 建立受 OAuth 保護的 API Proxy。
- 建立產品、開發人員和應用程式。
- 交換 OAuth 存取權杖的憑證。
- 使用存取權杖呼叫 API。
本教學課程說明如何使用 OAuth 2.0 保護 API。
OAuth 是一種授權通訊協定,可讓應用程式代表 使用者不必另外提供使用者名稱和密碼
使用 OAuth 時,系統會交換安全性憑證 (例如使用者名稱/密碼或金鑰/密鑰) 以取得存取權杖例如:
joe:joes_password
(username:password) 或
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb
(key:secret)
會變成:
b0uiYwjRZLEo4lEu7ky2GGxHkanN
存取權杖是一組隨機字串,且為臨時字元 (此憑證的 因此,在應用程式工作流程中,傳入此程式碼來驗證使用者身分 比起傳遞實際憑證,安全多了。
OAuth 2.0 規格定義了不同機制,稱為「授權類型」以發布存取權 符記OAuth 2.0 所定義的最基本授權類型稱為「用戶端」 憑證。」在這個授權類型中,系統會產生 OAuth 存取權杖以換取用戶端 憑證,也就是用戶端金鑰/用戶端密鑰組合,如上例所示。
系統會使用 API Proxy 中的政策,實作 Edge 中的用戶端憑證授權類型。A 罩杯 一般 OAuth 流程包含兩個步驟:
- 呼叫 API Proxy 1,從用戶端產生 OAuth 存取權杖 憑證API Proxy 的 OAuth v2.0 政策可以處理這個問題。
- 呼叫 API Proxy 2,在 API 呼叫中傳送 OAuth 存取權杖。 API Proxy 會使用 OAuth v2.0 政策驗證存取權杖。
軟硬體需求
- Apigee Edge 帳戶。如果你還沒有 Google 帳戶,可以透過指示註冊 「建立 Apigee 邊緣帳戶。
- 已在您的電腦上安裝 cURL 透過指令列發出 API 呼叫
下載及部署權杖產生 API Proxy
在這個步驟中,您將建立 API Proxy,用來從 在 API 呼叫中傳送的用戶端金鑰和用戶端密鑰。Apigee 提供範例 API Proxy 這種做法您將立即下載及部署 Proxy,稍後在教學課程中使用。(你 可以輕鬆自行建構這個 API Proxy這個下載及部署步驟很方便 並且示範如何輕鬆共用已建立的 Proxy)。
- 下載「OAuth」複製到檔案中任何目錄的範例 API Proxy ZIP 檔案 有些人會將 Cloud Storage 視為檔案系統 但實際上不是
- 前往 https://apigee.com/edge 並登入。
- 依序選取「開發」>「開發」API Proxy。
- 按一下「+ Proxy」。
- 在「建立 Proxy」精靈中,按一下「上傳 Proxy 組合」。
- 選擇已下載的
oauth.zip
檔案,然後按一下 按一下「下一步」。 - 按一下「建立」。
- 建構完成後,按一下「編輯 Proxy」即可查看新的 Proxy API Proxy 編輯器中。
- 在「API Proxy 編輯器總覽」頁面中,按一下「Deployment」下拉式選單
然後選取「測試」。這是貴機構的測試環境。
在確認提示中,按一下「部署」。
再次點選「Deployment」(部署) 下拉式選單時,出現綠色圖示表示 Proxy 已 部署到測試環境
做得好!您已成功下載及部署存取權杖產生 API 連至 Edge 機構
查看 OAuth 流程和政策
讓我們進一步瞭解 API Proxy 包含的內容。
- 在 API Proxy 編輯器中,按一下「Develop」(開發) 分頁標籤。左側
「Navigator」窗格,會顯示兩項政策。您也會看到兩組
POST
Proxy Endpoints
區段內的資料流。 -
按一下 AccessTokenClientCredential
Proxy Endpoints
。
在 XML 程式碼檢視畫面中,您會看到名為
Flow
AccessTokenClientCredential
:<Flow name="AccessTokenClientCredential"> <Description/> <Request> <Step> <Name>GenerateAccessTokenClient</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition> </Flow>
流程是 API Proxy 中的處理步驟。在這個示例中,流程會在 特定條件 (稱為「條件式流程」)條件
<Condition>
元素,表示如果發出 API Proxy 呼叫/accesstoken
資源,且要求動詞為POST
,則 執行GenerateAccessTokenClient
政策,藉此產生存取權 產生下一個符記 -
接下來說明條件式流程會觸發的政策。按一下 流程圖中的 GenerateAccessTokenClient 政策圖示。
以下 XML 設定會載入至程式碼檢視模式:<OAuthV2 name="GenerateAccessTokenClient"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <!-- This part is very important: most real OAuth 2.0 apps will want to use other grant types. In this case it is important to NOT include the "client_credentials" type because it allows a client to get access to a token with no user authentication --> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
設定包括下列項目:
<Operation>
,可以是數個預先定義的值之一。 定義政策要執行的動作在這個情況下,系統會產生 產生下一個符記- 權杖的有效期限為 1 小時 (3600000 毫秒)。
- 在
<SupportedGrantTypes>
中,OAuth 預計使用的<GrantType>
為client_credentials
(交換 OAuth 權杖的用戶端金鑰和密鑰)。 - 第二個
<GrantType>
元素向政策說明位置 對授權類型參數的 API 呼叫,根據 OAuth 2.0 規格的需求。 (您稍後會在 API 呼叫中看見這項資訊)。授權類型也可透過 HTTP 標頭 (request.header.grant_type
) 或表單參數 (request.formparam.grant_type
)。
目前您無須對 API Proxy 採取任何其他行動。在後續步驟中 您將使用這個 API Proxy 產生 OAuth 存取權杖。你必須先完成數項工作 其他資訊:
- 建立您要使用 OAuth 確保保護的 API Proxy。
- 再建立幾個會產生用戶端金鑰和用戶端密鑰的構件 您必須交換存取權杖
建立受 OAuth 保護的 API Proxy
現在,您將建立要保護的 API Proxy。這是 API 呼叫 傳回需要的內容在這種情況下,API Proxy 會呼叫 Apigee 的 mocktarget 服務 傳回 IP 位址。不過,只有在您傳遞有效的 OAuth 存取權時,才能查看權限。 產生憑證
您在這裡建立的 API Proxy 會包含政策,用於檢查 請求。
- 依序選取「開發」>「開發」API Proxy。
- 按一下「+ Proxy」。
- 在「Build a Proxy」(建構 Proxy) 精靈中,選取「Reverse Proxy (最常見)」。 然後點選「下一步」。
- 使用以下內容設定 Proxy:
在這個欄位 正確做法 Proxy 名稱 輸入: helloworld_oauth2
專案基礎路徑 變更為:
/hellooauth2
專案基本路徑是網址的一部分,用於向 API 發出要求 Proxy 上。
現有 API 輸入:
https://mocktarget.apigee.net/ip
這會定義 Apigee Edge 在對 API 要求時叫用的目標網址 Proxy 上。
說明 輸入: hello world protected by OAuth
- 點選「下一步」。
- 在「常見政策」頁面中執行下列操作:
在這個欄位 正確做法 安全性:授權 選取:OAuth 2.0 - 點選「下一步」。
- 在「Virtual Hosts」頁面中,按一下「Next」。
- 在「Build」頁面中,確認已選取「test」環境。 按一下「Create and Deploy」(建立及部署)。
- 「摘要」頁面會顯示新的 API Proxy 確認通知 已成功建立,而且 API Proxy 已部署至測試中 環境。
- 按一下「編輯 Proxy」,顯示 API Proxy 的「總覽」頁面。
請注意,系統現在會自動部署 API Proxy。按一下「Deployment」(部署) 圖示 確保「test」旁有綠色的 Deployment 圓點環境。
查看政策
讓我們進一步瞭解你建立的內容。
- 在 API Proxy 編輯器中,按一下「Develop」(開發) 分頁標籤。您會看到兩個
已將政策新增至 API Proxy 的要求流程:
- Verify OAuth v2.0 Access Token (驗證 OAuth v2.0 存取權杖):勾選 API 呼叫,以便發出 請確實提供有效的 OAuth 權杖。
- Remove Header Authorization (移除標頭授權):指派訊息政策 會在檢查後移除存取權杖,以免該憑證傳遞至 目標服務(如果目標服務需要 OAuth 存取權杖,您就不能使用 本政策)。
-
按一下流程檢視中的「Verify OAuth v2.0 Access Token」圖示,然後 請查看程式碼窗格下方的 XML
<OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token"> <DisplayName>Verify OAuth v2.0 Access Token</DisplayName> <Operation>VerifyAccessToken</Operation> </OAuthV2>
請注意,
<Operation>
為VerifyAccessToken
。 作業定義了政策應執行的動作。在這個範例中,該區塊 要求中的有效 OAuth 權杖。
新增 API 產品
如何使用 Apigee UI 新增 API 產品:
- 選取「發布」>「發布」API 產品。
- 按一下「+API 產品」。
- 輸入 API 產品的「產品詳細資料」。
欄位 說明 名稱 API 產品的內部名稱。請勿在名稱中指定特殊字元。
注意:API 產品建立後即無法修改名稱。例如:helloworld_oauth2-Product
顯示名稱 API 產品的顯示名稱。顯示名稱會用於 UI,您可以編輯 以便隨時使用如未指定,系統會使用名稱值。這個欄位已自動填入 使用名稱值;你可以編輯或刪除其中的內容顯示名稱可以包括 特殊字元例如 helloworld_oauth2-Product
。說明 API 產品的說明。 環境 API 產品允許存取的環境。選取要套用的環境 您部署了 API Proxy例如 test
。存取 選取「公開」。 自動核准存取要求 啟用自動核准任何應用程式對這項 API 產品發出的金鑰要求。 配額 在本教學課程中忽略此設定。 允許的 OAuth 範圍 在本教學課程中忽略此設定。 - 在「API Proxy」欄位中,選取您剛建立的 API Proxy。
- 在「Path」欄位中輸入「/」。請忽略其他欄位。
- 按一下 [儲存]。
將開發人員和應用程式加入 機構組織
接下來,您將會模擬開發人員申請使用您的 API 的工作流程。 理想情況下,開發人員應透過開發人員入口網站自行註冊及註冊應用程式。在本 然後將開發人員和應用程式新增為管理員。
開發人員會有一或多個應用程式呼叫您的 API,每個應用程式都會擁有一個專屬 用戶端金鑰和用戶端密鑰這個金鑰/密鑰/應用程式還能為 API 供應商提供 以更精細的 API 存取權控管 API 存取權,以及更精細的 API 數據分析報表 ,因為 Edge 知道哪個開發人員和應用程式屬於哪個 OAuth 權杖。
建立開發人員
讓我們建立一個開發人員 Nigel Tufnel。
- 選取「發布」>「發布」開發人員。
- 按一下「+ 開發人員」。
- 在「New Developer」視窗中輸入以下內容:
在這個欄位 Enter 鍵 名字 Nigel
姓氏 Tufnel
使用者名稱 nigel
電子郵件 nigel@example.com
- 按一下「建立」。
註冊應用程式
讓我們為 Nigel 建立應用程式。
- 選取「發布」>「發布」應用程式:
- 按一下「+ 應用程式」。
- 在「New App」視窗中輸入以下內容:
在這個欄位 正確做法 名稱和顯示名稱 輸入: nigel_app
開發人員 按一下「開發人員」,然後選取: Nigel Tufnel (nigel@example.com)
回呼網址和附註 留空 - 按一下「產品」下方的「新增產品」。
- 選取 helloworld_oauth2-Product。
- 按一下「建立」。
取得 用戶端金鑰和用戶端密鑰
現在您將取得將與 OAuth 交換的用戶端金鑰和用戶端密鑰 存取權杖
- 確認 nigel_app 頁面已顯示。如果沒有,請在「應用程式」頁面 (「發布」>「應用程式」) 中,按一下 nigel_app。
-
在 nigel_app 頁面,按一下「Key」(金鑰) 中的 [Show] (顯示) 和 Secret 資料欄。請注意,金鑰/密鑰 與「helloworld_oauth2-Product」相關聯的自動建立
- 選取並複製金鑰和密鑰。將這些內容貼到臨時 文字檔。您會在後續步驟中使用這些 Pod,也就是呼叫 API Proxy。 並以這些憑證交換 OAuth 存取權杖
請嘗試呼叫 API 取得 IP 位址 (失敗!)
只需試著呼叫受保護的 API Proxy,該 Proxy 應會傳回您的 IP
讓我們看看 DNS 解析
進一步探索內部和外部位址在終端機視窗中執行下列 cURL 指令,替換您的 Edge
機構名稱。網址中的 test
是你的
和機構測試環境,也就是您部署 Proxy 的目標環境。Proxy 基本路徑
/hellooauth2
,與您在建立 Proxy 時所指定的基本路徑相同。
請注意,
不要在呼叫中傳遞 OAuth 存取權杖。
curl https://ORG_NAME-test.apigee.net/hellooauth2
因為 API Proxy 具有驗證 OAuth v2.0 存取權杖政策 檢查請求中是否具備有效的 OAuth 憑證,呼叫就會失敗,並顯示以下錯誤: 訊息:
{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}
在此情況下,失敗是很好的現象!代表 API Proxy 的安全性較高。僅限信任 具備有效 OAuth 存取權杖的應用程式可以成功呼叫這個 API。
取得 OAuth 存取權杖
現在我們能收穫豐碩。您即將使用 並貼入文字檔,然後交換以取得 OAuth 存取權杖。你現在 這個函式會向您匯入的 API 範例 Proxy 發出 API 呼叫 OAuth, 系統會產生 API 存取權杖
使用該金鑰和密鑰進行下列 cURL 呼叫 (請注意,通訊協定為
https
),請替換您的 Edge 機構名稱、您的金鑰和
秘密提示:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ "https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \ -d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"
請注意,如果您使用 Postman 之類的用戶端來撥打電話,
client_id
和client_secret
位於以下地點的
且須為 x-www-form-urlencoded
。
您應該會收到類似下面的回應:
{ "issued_at" : "1466025769306", "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347", "scope" : "", "status" : "approved", "api_product_list" : "[helloworld_oauth2-Product]", "expires_in" : "3599", //--in seconds "developer.email" : "nigel@example.com", "token_type" : "BearerToken", "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW", "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0", "organization_name" : "myOrg", "refresh_token_expires_in" : "0", //--in seconds "refresh_count" : "0" }
您已取得 OAuth 存取權杖!複製 access_token 值 (不含引號),然後 然後貼到文字檔中稍後會用到。
發生什麼事了?
請記住,先前在
oauth Proxy,也就是所說的資源 URI 為
/accesstoken
,而要求動詞為 POST
,以便執行
要產生存取權杖的 GenerateAccessTokenClient
OAuth 政策嗎?您的 cURL
指令符合這些條件,所以執行 OAuth 政策。已驗證您的用戶端金鑰
和用戶端密鑰,然後交換給一組 1 小時後到期的 OAuth 權杖。
使用存取權杖呼叫 API (成功!)
現在您已取得存取權杖,可以用來呼叫 API Proxy。做出 。請替換您的 Edge 機構名稱和存取權杖。
curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"
您現在應可成功呼叫可傳回 IP 位址的 API Proxy。範例如下:
{"ip":"::ffff:192.168.14.136"}
您可以重複執行該 API 呼叫,時間大約一小時,之後存取權杖就會 過期。若要在一小時後發出呼叫,則必須使用 先前的步驟
恭喜!您已建立 API Proxy,並要求提供有效的 API Proxy 來保護該 Proxy OAuth 存取權杖包含在呼叫中。
相關主題
- OAuth 首頁
- OAuthV2 政策
- 下載 API Proxy (說明如何將 API Proxy 組合成 ZIP 檔案 (與您所下載的檔案相同)