要求 API 金鑰來保護 API

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

影片:請觀看這部短片,瞭解如何保護 API 安全。

課程內容

本教學課程將說明如何:

  • 建立需要 API 金鑰的 API Proxy。
  • 建立 API 產品、開發人員和開發人員應用程式。
  • 使用 API 金鑰呼叫 API。

請務必妥善保護您的 API,防止他人在未經授權的情況下擅自存取。其中一種方法是使用 API 金鑰。

當應用程式向已設定為驗證 API 金鑰的 API Proxy 提出要求時,應用程式必須提供有效的金鑰。在執行階段,驗證 API 金鑰政策會檢查所提供的 API 金鑰是否符合下列條件:

  • 有效
  • 未遭撤銷
  • 與公開要求資源的 API 產品相符的 API 金鑰

如果金鑰有效,系統就會允許要求。如果金鑰無效,要求就會導致授權失敗。

建立 API Proxy

  1. 前往 Apigee UI 並登入帳戶。
  2. 使用 UI 左上角的下拉式選單選取機構。
  3. 依序點選「Develop」>「API Proxies」,即可查看 API Proxy 清單。

  4. 按一下「建立新項目」
    「建立 Proxy」按鈕
  5. 在「Build a Proxy」精靈中,選取「Reverse proxy (most common)」
  6. 請依照下列步驟設定 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!

  7. 點按「Next」
  8. 在「常見政策」頁面中,選取「API 金鑰」。 這個選項會自動在 API Proxy 中新增兩個政策,並建立產生 API 金鑰所需的 API 產品。
  9. 點按「Next」
  10. 在「摘要」頁面中,確認已選取部署環境,然後按一下「建立並部署」
  11. 按一下「Edit proxy」,即可顯示 API proxy 的總覽頁面。

查看政策

  1. 在 API Proxy 編輯器中,按一下「Develop」分頁標籤。您會發現已在 API 代理程式的要求流程中新增兩項政策:
    • 驗證 API 金鑰:檢查 API 呼叫,確認是否有有效的 API 金鑰 (以查詢參數的形式傳送)。
    • 移除查詢參數 apikey – 這項指派訊息政策會在 API 金鑰經過檢查後將其移除,以免金鑰不必要地傳遞及公開。
  2. 按一下流程檢視畫面中的「驗證 API 金鑰」政策圖示,然後查看下方程式碼檢視畫面中的政策 XML 設定。<APIKey> 元素會告知政策,在發出呼叫時應尋找 API 金鑰的位置。根據預設,系統會在 HTTP 要求中尋找名為 apikey 的查詢參數做為鍵:

    <APIKey ref="request.queryparam.apikey" />

    名稱 apikey 是任意值,可以是任何包含 API 金鑰的屬性。

嘗試呼叫 API

在這個步驟中,您會成功呼叫目標服務的 API,然後呼叫 API Proxy 並失敗,以便瞭解政策如何保護 API。

  1. 成功

    在網路瀏覽器中前往下列網址,這是 API Proxy 設定要轉送要求的目標服務,但您現在會直接觸及該服務:

    http://mocktarget.apigee.net

    您應該會收到以下成功回應:Hello, Guest!

  2. 失敗

    請嘗試呼叫 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 產品,請按照下列步驟操作:

  1. 依序選取「發布」>「API 產品」
  2. 點選「+建立」
  3. 輸入 API 產品的產品詳細資料。
    欄位 說明
    名稱 API 產品的內部名稱。名稱中不得使用特殊字元。
    注意:API 產品建立後,您就無法再編輯名稱。
    顯示名稱 API 產品的顯示名稱。這個顯示名稱會用於使用者介面,您隨時可以編輯。如未指定,系統會使用 Name 值。系統會使用「名稱」值自動填入這個欄位,您可以編輯或刪除其內容。顯示名稱可以包含特殊字元。
    說明 API 產品的說明。
    環境 API 產品可存取的環境。例如 testprod
    存取 選取 Public
    自動核准存取要求 啟用自動核准功能,讓任何應用程式都能自動核准這項 API 產品的金鑰要求。
    配額 在本教學課程中可忽略。
    允許的 OAuth 範圍 在本教學課程中可忽略。
  4. 在「操作」部分中,按一下「新增操作」
  5. 在「API Proxy」欄位中,選取您剛剛建立的 API Proxy。
  6. 在「路徑」欄位中輸入「/」。請忽略其他欄位。
  7. 按一下「儲存」,即可儲存作業。
  8. 按一下「儲存」,即可儲存 API 產品。

將開發人員和應用程式新增至貴機構

接下來,我們將模擬開發人員註冊使用 API 的工作流程。開發人員會有一或多個呼叫 API 的應用程式,每個應用程式都會取得一個專屬的 API 金鑰。這可讓 API 供應商更精細地控管 API 存取權,並針對各應用程式的 API 流量提供更精細的報表。

建立開發人員

如要建立開發人員,請按照下列步驟操作:

  1. 在選單中依序選取「發布」>「開發人員」
    注意:如果您仍在「Develop」畫面,請按一下「DEVELOP」旁的「<<」,顯示選單,然後選取「Publish」>「Developers」
  2. 按一下「+ 開發人員」
  3. 在「新增開發人員」視窗中輸入以下內容:
    在這個欄位中 Enter 鍵
    名字 Keyser
    姓氏 Soze
    使用者名稱 keyser
    電子郵件 [email protected]
  4. 按一下 [建立]。

註冊應用程式

如要註冊開發人員應用程式,請按照下列步驟操作:

  1. 依序選取「發布」>「應用程式」
  2. 按一下「+ 應用程式」
  3. 在「New Developer App」視窗中輸入以下內容:
    在這個欄位中 執行這項操作
    名稱顯示名稱 輸入:keyser_app
    開發人員 選取:Keyser Soze ([email protected])
    回呼網址附註 留空
  4. 在「憑證」部分中,選取「從不」。 這個應用程式的憑證永遠不會過期。
  5. 按一下「新增產品」
  6. 選取剛剛建立的產品。
  7. 按一下 [建立]。

取得 API 金鑰

取得 API 金鑰的方法如下:

  1. 在「應用程式」頁面 (「發布」>「應用程式」) 中,按一下「keyser_app」keyser_app
  2. keyser_app 頁面上,按一下「憑證」部分的「金鑰」旁邊的「顯示」。請注意,金鑰與您建立的產品相關聯。
  3. 選取並複製金鑰。您將在下一個步驟中使用此項目。

使用金鑰呼叫 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 金鑰。

  1. 編輯 API Proxy。依序選取「Develop」>「API Proxies」>「helloworld_apikey」,然後前往「Develop」檢視畫面。
  2. 選取「Verify API Key」政策,然後修改政策 XML,指示政策在 header 中查找,而不是在 queryparam 中查找:

    <APIKey ref="request.header.x-apikey"/>
  3. 儲存 API Proxy,然後使用「Deploy」部署。
  4. 使用 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>

相關主題

以下是與 API 產品和金鑰相關的幾個主題:

API 保護措施通常會涉及額外的安全防護機制,例如 OAuth,這是一種開放式通訊協定,可將憑證 (例如使用者名稱和密碼) 交換成存取權杖。存取權權杖是長的隨機字串,可透過訊息管道 (包括從應用程式傳送至應用程式) 傳遞,且不會影響原始憑證。

如需安全性相關主題的總覽,請參閱「保護 Proxy」。