设置 API 密钥验证

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

您可以通过附加 VerifyAPIKey 政策,为 API 设置 API 密钥验证。VerifyAPIKey 政策所需的唯一设置是客户端请求中 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://apigee.googleapis.com/v1/organizations/$ORG/developers/$DEVELOPER_EMAIL/apps/$APP \
  -H "Authorization: Bearer $TOKEN"

按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 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