本页面适用于 Apigee 和 Apigee 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