設定 API 金鑰驗證

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

您可以附加「驗證 API 金鑰」類型的政策,為 API 設定 API 金鑰驗證。VerifyAPIKey 政策唯一必要的設定,就是用戶端要求中 API 金鑰的預期位置。API Proxy 會檢查您指定的位置,並擷取 API 金鑰。如果 API 金鑰不在預期位置,系統會擲回錯誤,並拒絕要求。API 金鑰可位於查詢參數、表單參數或 HTTP 標頭中。

例如,下列政策設定將預期的索引鍵位置定義為名為 apikey 的查詢參數。成功的要求必須將 API 金鑰做為查詢參數附加至要求,例如 ?apikey=Y7yeiuhcbKJHD790

如要驗證 API 金鑰,請建立下列政策:

<VerifyAPIKey name="APIKeyValidation">
  <APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>

這項政策可套用至您需要保護的任何 API。

如需這類政策的完整說明文件,請參閱「VerifyAPIKey 政策」政策參考主題。

API 代理程式會自動傳遞要求中出現的所有 HTTP 標頭和查詢參數。因此,在驗證 API 金鑰後,建議您從訊息中移除該金鑰,以免 API 金鑰透過網路傳送至後端服務。您可以使用 AssignMessage 類型的政策來執行這項操作,如下所示:

<AssignMessage name="StripApiKey">
    <DisplayName>Remove Query Param</DisplayName>
    <Remove>
        <QueryParams>
            <QueryParam name="apikey"/>
        </QueryParams>
    </Remove>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"></AssignTo>
</AssignMessage>

政策附加

政策必須附加至 API Proxy 流程,做為處理步驟。將政策套用至要求 PreFlow 後,API 代理會在從用戶端應用程式收到的每項要求上驗證 API 金鑰。驗證完成後,API 金鑰會從傳出要求中移除。

將政策附加至要保護的 API Proxy 的 ProxyEndpoint,如下所示:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request>
      <Step><Name>APIKeyValidation</Name></Step>
      <Step><Name>StripApiKey</Name></Step>
    </Request>
  </PreFlow>

附加政策後,請部署 API Proxy。

使用有效的 API 金鑰提交要求

機構管理員可以透過下列方式擷取任何應用程式的 API 金鑰:

curl "https://apigee.googleapis.com/v1/organizations/$ORG/developers/$DEVELOPER_EMAIL/apps/$APP \
  -H "Authorization: Bearer $TOKEN"

其中 $TOKEN 會設為您的 OAuth 2.0 存取權憑證,如取得 OAuth 2.0 存取權憑證一文所述。如要瞭解本範例中使用的 curl 選項,請參閱「使用 curl」。如要瞭解所使用的環境變數,請參閱「為 Apigee API 要求設定環境變數」。

為此呼叫傳回的應用程式設定檔會提供消費者金鑰 (API 金鑰) 和密碼。消費者金鑰值是您在提出保護 API 要求時,用於 API 金鑰的值。

舉例來說,如果要求未包含 API 金鑰,就會導致授權失敗。

curl http://apitest.examplepetstore.com/weather/forecastrss?w=12797282

失敗訊息表示政策檢查 API 金鑰,但未找到有效的金鑰:

OAuth Failure : Could not resolve the app key with variable request.queryparam.apikey

當應用程式的消費者金鑰以查詢參數的形式加入時,預期結果為授權成功:

curl http://apitest.examplepetstore.com/weather/forecastrss?w=12797282&"apikey=PulSCqMnXGchW0pC0s5o9ngHVTWMeLqk"

預期結果是天氣服務成功回應。

修改要求中 API 鍵值的值會導致授權失敗:

curl http://apitest.examplepetstore.com/weather?forecastrss?w=12797282&"apikey=PulSCqMnXGchW0"

以下地點的結果:

OAuth Failure : Consumer Key is Invalid