设置 API 密钥验证

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

您可以通过附加 VerifyAPIKey 政策,为 API 设置 API 密钥验证。通过 验证 API 密钥政策仅需要设置 API 密钥在 客户端请求API 代理将检查您指定的位置,并提取 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 代理流。将政策应用于请求 PreFlow 后,系统会对从客户端应用的 API 代理收到的每个请求验证 API 密钥。验证完成后,该 API 密钥会从出站请求中删除。

将政策附加到要保护的 API 代理的 ProxyEndpoint,如下所示:

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

附加政策后,请部署 API 代理。

使用有效的 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