本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
影片:請觀看這部短片,瞭解如何保護 API 安全。
課程內容
本教學課程將說明如何:
- 建立需要 API 金鑰的 API Proxy。
- 建立 API 產品、開發人員和開發人員應用程式。
- 使用 API 金鑰呼叫 API。
請務必妥善保護您的 API,防止他人在未經授權的情況下擅自存取。其中一種方法是使用 API 金鑰。
當應用程式向已設定為驗證 API 金鑰的 API Proxy 提出要求時,應用程式必須提供有效的金鑰。在執行階段,驗證 API 金鑰政策會檢查所提供的 API 金鑰是否符合下列條件:
- 有效
- 未遭撤銷
- 與公開要求資源的 API 產品相符的 API 金鑰
如果金鑰有效,系統就會允許要求。如果金鑰無效,要求就會導致授權失敗。
建立 API Proxy
- 前往 Apigee UI 並登入帳戶。
- 使用 UI 左上角的下拉式選單選取機構。
-
依序點選「Develop」>「API Proxies」,即可查看 API Proxy 清單。
- 按一下「建立新項目」。
- 在「Build a Proxy」精靈中,選取「Reverse proxy (most common)」。
- 請依照下列步驟設定 Proxy:
在這個欄位中 執行這項操作 Proxy 名稱 輸入: helloworld_apikey
專案 Base Path 變更為:
/helloapikey
專案基礎路徑是用於向 API Proxy 提出要求的網址的一部分。
說明 輸入: hello world protected by API key
目標 (現有 API) 輸入:
http://mocktarget.apigee.net
這會定義 Apigee 在對 API Proxy 提出要求時,所叫用的目標網址。這個目標只會傳回簡單的回應:
Hello, Guest!
。 - 點按「Next」。
- 在「常見政策」頁面中,選取「API 金鑰」。 這個選項會自動在 API Proxy 中新增兩個政策,並建立產生 API 金鑰所需的 API 產品。
- 點按「Next」。
- 在「摘要」頁面中,確認已選取部署環境,然後按一下「建立並部署」。
- 按一下「Edit proxy」,即可顯示 API proxy 的總覽頁面。
查看政策
- 在 API Proxy 編輯器中,按一下「Develop」分頁標籤。您會發現已在 API 代理程式的要求流程中新增兩項政策:
- 驗證 API 金鑰:檢查 API 呼叫,確認是否有有效的 API 金鑰 (以查詢參數的形式傳送)。
- 移除查詢參數 apikey – 這項指派訊息政策會在 API 金鑰經過檢查後將其移除,以免金鑰不必要地傳遞及公開。
-
按一下流程檢視畫面中的「驗證 API 金鑰」政策圖示,然後查看下方程式碼檢視畫面中的政策 XML 設定。
<APIKey>
元素會告知政策,在發出呼叫時應尋找 API 金鑰的位置。根據預設,系統會在 HTTP 要求中尋找名為apikey
的查詢參數做為鍵:<APIKey ref="request.queryparam.apikey" />
名稱
apikey
是任意值,可以是任何包含 API 金鑰的屬性。
嘗試呼叫 API
在這個步驟中,您會成功呼叫目標服務的 API,然後呼叫 API Proxy 並失敗,以便瞭解政策如何保護 API。
-
成功
在網路瀏覽器中前往下列網址,這是 API Proxy 設定要轉送要求的目標服務,但您現在會直接觸及該服務:
http://mocktarget.apigee.net
您應該會收到以下成功回應:
Hello, Guest!
-
失敗
請嘗試呼叫 API Proxy:
curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey
其中
YOUR ENV_GROUP_HOSTNAME
是環境群組主機名稱。請參閱「 找出環境群組主機名稱」一文。如果沒有「驗證 API 金鑰」政策,這個呼叫會提供與先前呼叫相同的回應。但在這種情況下,您應該會收到以下錯誤回應:
{"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
這表示您並未傳遞有效的 API 金鑰 (做為查詢參數)。
在後續步驟中,您將取得必要的 API 金鑰。
新增 API 產品
如要使用 Apigee UI 新增 API 產品,請按照下列步驟操作:
- 依序選取「發布」>「API 產品」。
- 點選「+建立」。
- 輸入 API 產品的產品詳細資料。
欄位 說明 名稱 API 產品的內部名稱。名稱中不得使用特殊字元。
注意:API 產品建立後,您就無法再編輯名稱。顯示名稱 API 產品的顯示名稱。這個顯示名稱會用於使用者介面,您隨時可以編輯。如未指定,系統會使用 Name 值。系統會使用「名稱」值自動填入這個欄位,您可以編輯或刪除其內容。顯示名稱可以包含特殊字元。 說明 API 產品的說明。 環境 API 產品可存取的環境。例如 test
或prod
。存取 選取 Public。 自動核准存取要求 啟用自動核准功能,讓任何應用程式都能自動核准這項 API 產品的金鑰要求。 配額 在本教學課程中可忽略。 允許的 OAuth 範圍 在本教學課程中可忽略。 - 在「操作」部分中,按一下「新增操作」。
- 在「API Proxy」欄位中,選取您剛剛建立的 API Proxy。
- 在「路徑」欄位中輸入「/」。請忽略其他欄位。
- 按一下「儲存」,即可儲存作業。
- 按一下「儲存」,即可儲存 API 產品。
將開發人員和應用程式新增至貴機構
接下來,我們將模擬開發人員註冊使用 API 的工作流程。開發人員會有一或多個呼叫 API 的應用程式,每個應用程式都會取得一個專屬的 API 金鑰。這可讓 API 供應商更精細地控管 API 存取權,並針對各應用程式的 API 流量提供更精細的報表。
建立開發人員
如要建立開發人員,請按照下列步驟操作:
- 在選單中依序選取「發布」>「開發人員」。
注意:如果您仍在「Develop」畫面,請按一下「DEVELOP」旁的「<<」,顯示選單,然後選取「Publish」>「Developers」。 - 按一下「+ 開發人員」。
- 在「新增開發人員」視窗中輸入以下內容:
在這個欄位中 Enter 鍵 名字 Keyser
姓氏 Soze
使用者名稱 keyser
電子郵件 [email protected]
- 按一下 [建立]。
註冊應用程式
如要註冊開發人員應用程式,請按照下列步驟操作:
- 依序選取「發布」>「應用程式」。
- 按一下「+ 應用程式」。
- 在「New Developer App」視窗中輸入以下內容:
在這個欄位中 執行這項操作 名稱和顯示名稱 輸入: keyser_app
開發人員 選取: Keyser Soze ([email protected])
回呼網址和附註 留空 - 在「憑證」部分中,選取「從不」。 這個應用程式的憑證永遠不會過期。
- 按一下「新增產品」。
- 選取剛剛建立的產品。
- 按一下 [建立]。
取得 API 金鑰
取得 API 金鑰的方法如下:
- 在「應用程式」頁面 (「發布」>「應用程式」) 中,按一下「keyser_app」keyser_app。
- 在 keyser_app 頁面上,按一下「憑證」部分的「金鑰」旁邊的「顯示」。請注意,金鑰與您建立的產品相關聯。
- 選取並複製金鑰。您將在下一個步驟中使用此項目。
使用金鑰呼叫 API
有了 API 金鑰後,您可以使用該金鑰呼叫 API Proxy。請將 API 金鑰貼上做為查詢參數,如圖所示。確認查詢參數中沒有多餘的空格。
curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key
呼叫 API Proxy 時,您應該會收到以下回應:Hello,
Guest!
恭喜!您已建立 API Proxy,並要求在呼叫中加入有效的 API 金鑰,以便保護 API Proxy。
請注意,一般來說,將 API 金鑰做為查詢參數傳遞並非良好做法。建議您改為在 HTTP 標頭中傳遞。
最佳做法:在 HTTP 標頭中傳遞鍵
在這個步驟中,您將修改 Proxy,讓 Proxy 在名為 x-apikey
的標頭中尋找 API 金鑰。
- 編輯 API Proxy。依序選取「Develop」>「API Proxies」>「helloworld_apikey」,然後前往「Develop」檢視畫面。
-
選取「Verify API Key」政策,然後修改政策 XML,指示政策在
header
中查找,而不是在queryparam
中查找:<APIKey ref="request.header.x-apikey"/>
- 儲存 API Proxy,然後使用「Deploy」部署。
-
使用 cURL 發出下列 API 呼叫,將 API 金鑰做為名為
x-apikey
的標頭傳遞。請務必替換為貴機構的名稱。curl -v -H "x-apikey: {api_key_goes_here}" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey
請注意,如要完全完成變更,您還需要設定「指派訊息」政策,以移除標頭,而非查詢參數。例如:
<Remove> <Headers> <Header name="x-apikey"/> </Headers> </Remove>