設定 API 金鑰驗證

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

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

舉例來說,以下政策設定會將預期的金鑰位置定義為名為 apikey 的查詢參數。如要成功提出要求,必須在要求中附加 API 金鑰做為查詢參數,例如 ?apikey=Y7yeiuhcbKJHD790

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

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

這項政策可附加至任何需要保護的 API。

如需這類政策的完整說明文件,請參閱政策參考主題「驗證 API 金鑰政策」。

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://api.enterprise.apigee.com/v1/o/{myorg}/developers/{developer_email}/apps/{app_name} -u email:password 

這項呼叫傳回的應用程式設定檔會提供用戶端金鑰 (API 金鑰) 和密鑰。 用戶端金鑰值是您在向受保護的 API 發出要求時,做為 API 金鑰使用的值。

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

$ curl http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

失敗訊息指出政策已檢查 API 金鑰,但未找到有效金鑰:

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

如果應用程式的用戶端金鑰做為查詢參數,預期結果是授權成功:

$ curl http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282&"apikey=PulSCqMnXGchW0pC0s5o9ngHVTWMeLqk"

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

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

$ curl http://{org_name}-test.apigee.net/weather?forecastrss?w=12797282&"apikey=PulSCqMnXGchW0"

會產生以下結果:

OAuth Failure : Consumer Key is Invalid

請注意,機構管理員可以擷取機構中註冊的任何應用程式的用戶端金鑰:

$ curl https://api.enterprise.apigee.com/v1/o/{myorg}/developers/{developer_email}/apps/{app_name} -u email:password