您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
課程內容
- 下載並部署範例 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 存取權杖,以換取用戶端憑證 (即用戶端金鑰/用戶端密鑰配對,如上例所示)。
Edge 中的用戶端憑證授權類型是透過 API Proxy 中的政策實作。典型的 OAuth 流程包含兩個步驟:
- 呼叫 API Proxy 1,從用戶端憑證產生 OAuth 存取權杖。API Proxy 上的 OAuth v2.0 政策會處理這項作業。
- 呼叫 API Proxy 2,在 API 呼叫中傳送 OAuth 存取權杖。API Proxy 會使用 OAuth v2.0 政策驗證存取權杖。
軟硬體需求
- Apigee Edge 帳戶。如果還沒有帳戶,請按照「建立 Apigee Edge 帳戶」一文中的指示註冊。
- 電腦上已安裝 cURL,可從指令列發出 API 呼叫。
下載及部署權杖產生 API Proxy
在這個步驟中,您將建立 API Proxy,從 API 呼叫中傳送的用戶端金鑰和消費者密鑰產生 OAuth 存取權杖。Apigee 提供可執行這項操作的範例 API Proxy。您現在要下載及部署 Proxy,稍後在教學課程中會用到。(您可以輕鬆自行建構這個 API Proxy。(下載及部署步驟是為了方便起見,並向您展示分享已建立的 Proxy 有多麼容易。)
- 將「oauth」範例 API Proxy ZIP 檔下載至檔案系統的任何目錄。
- 前往 https://apigee.com/edge 並登入。
- 在左側導覽列中,依序選取「開發」>「API Proxy」。
- 按一下「+ Proxy」。

- 在「建立 Proxy」精靈中,按一下「上傳 Proxy 套裝組合」。
- 選擇您下載的
oauth.zip檔案,然後按一下「下一步」。 - 點選「建立」。
- 建構完成後,按一下「編輯 Proxy」,即可在 API Proxy 編輯器中查看新的 Proxy。
- 在 API Proxy 編輯器的「總覽」頁面中,按一下「部署」下拉式選單,然後選取「測試」。這是貴機構的測試環境。

在確認提示中,按一下「Deploy」。
再次點選「部署作業」下拉式選單時,綠色圖示會指出 Proxy 已部署至測試環境。

太棒了!您已成功下載並將存取權杖產生 API Proxy 部署至 Edge 機構。
查看 OAuth 流程和政策
讓我們進一步瞭解 API Proxy 包含哪些內容。
- 在 API Proxy 編輯器中,點按「Develop」分頁標籤。左側的「Navigator」Navigator窗格會顯示兩項政策。您也會在「
Proxy Endpoints」部分看到兩個POST流程。 -
按一下
Proxy Endpoints下方的「AccessTokenClientCredential」AccessTokenClientCredential。

在 XML 程式碼檢視畫面中,您會看到名為
AccessTokenClientCredential的Flow:<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」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>元素會根據 OAuth 2.0 規格,告知政策要在 API 呼叫中的哪個位置尋找授權類型參數。(稍後您會在 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 位址。但只有在 API 呼叫中傳遞有效的 OAuth 存取權杖,您才能看到這項資訊。
您在此建立的 API Proxy 會包含一項政策,用於檢查要求中是否有 OAuth 權杖。
- 在左側導覽列中,依序選取「開發」>「API Proxy」。
- 按一下「+ Proxy」。

- 在「Build a Proxy」(建立 Proxy) 精靈中,選取「Reverse proxy (most common)」(反向 Proxy (最常見)),然後按一下「Next」(下一步)。
- 使用下列項目設定 Proxy:
在這個欄位中 請按照下列步驟操作: Proxy 名稱 輸入: helloworld_oauth2專案基本路徑 變更為:
/hellooauth2專案基本路徑是向 API Proxy 提出要求時所用網址的一部分。
現有 API 輸入:
https://mocktarget.apigee.net/ip這會定義 Apigee Edge 在對 API Proxy 發出要求時,所叫用的目標網址。
說明 輸入: hello world protected by OAuth - 點選 [下一步]。
- 在「Common policies」(一般政策) 頁面中:
在這個欄位中 請按照下列步驟操作: 安全性:授權 選取「OAuth 2.0」 - 點選 [下一步]。
- 在「虛擬主機」頁面中,按一下「下一步」。
- 在「Build」(建構) 頁面中,確認已選取 test 環境,然後按一下「Create and Deploy」(建立及部署)。
- 在「摘要」頁面中,您會看到確認訊息,指出新的 API Proxy 已成功建立,且已部署至測試環境。
- 按一下「編輯 Proxy」,即可顯示 API Proxy 的「總覽」頁面。
請注意,這次 API Proxy 會自動部署。按一下「部署」下拉式選單,確認「測試」環境旁有綠色的部署點。
查看政策
讓我們進一步瞭解您建立的內容。
- 在 API Proxy 編輯器中,點按「Develop」分頁標籤。您會看到兩個政策已新增至 API Proxy 的要求流程:
- 驗證 OAuth v2.0 存取權杖:檢查 API 呼叫,確保存在有效的 OAuth 權杖。
- 移除授權標頭:AssignMessage 政策會在存取權杖通過檢查後移除權杖,避免權杖傳遞至目標服務。(如果目標服務需要 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。「Operation」定義政策應執行的動作。在本例中,這項動作會在要求中檢查有效的 OAuth 權杖。
新增 API 產品
如要使用 Apigee UI 新增 API 產品,請按照下列步驟操作:
- 選取「發布」>「API 產品」。
- 按一下「+ API 產品」。
- 輸入 API 產品的產品詳細資料。
欄位 說明 名稱 API 產品的內部名稱。名稱中不得包含特殊字元。
注意:API 產品建立完成後,您就無法編輯名稱。例如:helloworld_oauth2-Product顯示名稱 API 產品的顯示名稱,顯示名稱會顯示在使用者介面中,而且隨時可以編輯。如未指定,系統會使用「名稱」值。系統會使用「名稱」值自動填入這個欄位,您可以編輯或刪除其內容。顯示名稱可以包含特殊字元。例如 helloworld_oauth2-Product。說明 API 產品說明。 環境 API 產品允許存取的環境。選取您部署 API Proxy 的環境。例如 test。存取權 選取「公開」。 自動核准存取要求 針對任何應用程式,啟用這個 API 產品的金鑰要求自動核准功能。 配額 在本教學課程中,請忽略這項錯誤。 允許的 OAuth 範圍 在本教學課程中,請忽略這項錯誤。 - 在「API proxies」(API Proxy) 欄位中,選取您剛建立的 API Proxy。
- 在「路徑」欄位中輸入「/」。忽略其他欄位。
- 按一下 [儲存]。
在機構中新增開發人員和應用程式
接下來,您要模擬開發人員註冊使用 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。
-
在 nigel_app 頁面中,按一下「Key」和「Secret」欄中的「Show」。請注意,金鑰/密鑰與先前自動建立的「helloworld_oauth2-Product」相關聯。
- 選取並複製金鑰和密鑰。將這些內容貼到臨時文字檔中。您會在後續步驟中使用這些憑證,呼叫 API Proxy,將這些憑證換成 OAuth 存取權杖。
嘗試呼叫 API 來取得 IP 位址 (失敗!)
為了好玩,請嘗試呼叫應該會傳回 IP 位址的受保護 API Proxy。在終端機視窗中執行下列 cURL 指令,並替換 Edge 機構名稱。網址中的 test 是貴機構的測試環境,也就是您部署 Proxy 的環境。Proxy 基礎路徑為 /hellooauth2,與您建立 Proxy 時指定的基礎路徑相同。請注意,您並未在呼叫中傳遞 OAuth 存取權杖。
curl https://ORG_NAME-test.apigee.net/hellooauth2
由於 API Proxy 具有「Verify OAuth v2.0 Access Token」政策,會檢查要求中是否有有效的 OAuth 權杖,因此呼叫應會失敗,並顯示下列訊息:
{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}在這種情況下,失敗是好事!這表示您的 API Proxy 安全性更高。只有具備有效 OAuth 存取權杖的信任應用程式,才能成功呼叫這個 API。
取得 OAuth 存取權杖
現在我們來看看成果。您即將使用複製並貼到文字檔的金鑰和密鑰,換取 OAuth 存取權杖。現在要對匯入的 API 範例 Proxy oauth 發出 API 呼叫,產生 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。發出下列 cURL 呼叫。替換 Edge 機構名稱和存取權杖。
curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"
您現在應該可以成功呼叫 API Proxy,並傳回 IP 位址。範例如下:
{"ip":"::ffff:192.168.14.136"}您可以在將近一小時內重複呼叫該 API,之後存取權杖就會過期。如要在一小時後撥打電話,請按照先前的步驟產生新的存取權杖。
恭喜!您已建立 API Proxy,並要求呼叫時必須包含有效的 OAuth 存取權杖,藉此保護 Proxy。
相關主題
- OAuth 首頁
- OAuthV2 政策
- 下載 API Proxy (說明如何將 API Proxy 封裝成 ZIP 檔案,就像您下載的檔案一樣)