設定 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 Proxy 會自動傳遞要求中出現的所有 HTTP 標頭和查詢參數。因此,驗證 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 Proxy 每次從用戶端應用程式收到要求時,都會驗證 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