您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
学习内容
通过本教程,您将学会:
- 创建需要 API 密钥的 API 代理。
- 添加 API 产品。
- 添加开发者并注册应用。
- 使用 API 密钥调用 API。
请务必保护您的 API 免遭未经授权的访问。一种方法是使用 API 密钥(也称为公钥、使用方密钥或应用密钥)。
当应用向您的 API 发出请求时,应用必须提供有效的密钥。在运行时,“验证 API 密钥”政策 会检查提供的 API 密钥:
- 有效
- 尚未撤消
- 匹配公开所请求 资源的 API 产品的 API 密钥
如果密钥有效,则允许请求。如果密钥无效,则 请求会导致授权失败。
在本教程中,您将创建一个需要有效 API 密钥才能访问的 API 代理。
所需条件
- Apigee Edge 账号。如果您还没有该帐号,可以按照 创建 Apigee Edge 帐号中的说明进行注册。
- 用于进行 API 调用的网络浏览器。
- (对于额外部分,不需要) cURL 安装在 您的机器上以从命令行进行 API 调用的 c网址。
创建 API 代理
- 前往 https://apigee.com/edge 并登录。
切换到所需组织,方法是点击侧导航栏顶部的用户名以显示用户个人资料菜单,然后从列表中选择组织。
-
点击着陆页上的 API 代理 以显示 API 代理列表。
- 点击 + 代理。

- 在创建代理 页面上,选择反向代理(最常见) 。
- 在代理详细信息 页面上,按如下方式配置代理:
在此字段中 执行该操作 代理名称 输入: helloworld_apikey项目基本路径 更改为:
/helloapikey项目基本路径是用于向 API 代理发出 请求的网址的一部分。
注意:如需 Apigee 关于 API 版本控制的建议,请参阅《网络 API 设计:缺失的环节》(Web API Design: The Missing Link) 电子书中的 版本控制。
现有 API 输入:
http://mocktarget.apigee.net这定义了 Apigee Edge 在对 API 代理的 请求上调用的目标网址。
说明 输入: hello world protected by API key - 点击下一步 。
- 在通用政策 页面的安全性: 授权 下,选择 API 密钥 ,然后点击下一步 。这 会将两项政策添加到您的 API 代理。
- 在虚拟主机 页面上,选择默认 和
安全 ,然后点击下一步 。选择默认 可让您使用
http://调用 API。选择安全, 可让您使用https://调用 API。 - 在摘要 页面上,确保已选择 test 部署 环境,然后点击创建并部署。
- 您会看到关于新 API 代理和 API 产品已成功创建的确认消息,以及相应 API 代理已部署到 您的测试环境中。
- 点击修改代理 ,以显示概览 页面,以显示 API 代理。
查看政策
- 在 API 代理编辑器中,点击开发 标签页。您将看到
API 代理的请求流程中添加了两个政策:
- 验证 API 密钥 :检查 API 调用,以确保存在有效的 API 密钥(作为查询参数发送)。
- 删除查询参数 apikey:一项 AssignMessage 政策,选中后会移除 API 密钥,以防不必要地传递和公开该 API 密钥。
-
点击流视图中的验证 API 密钥政策图标,然后在下部的代码视图中查看政策的 XML 配置。
<APIKey>元素会告知政策应在调用时从何处 查找 API 密钥。默认情况下,它会在 HTTP 请求中查找作为名为apikey的查询参数的 密钥:<APIKey ref="request.queryparam.apikey" />
名称
apikey是任意名称,可以是包含 API 密钥的任何属性 。
尝试调用 API
在此步骤中,您将对目标 服务直接进行成功的 API 调用,然后对 API 代理进行失败调用,以了解它如何受政策保护。
-
成功
在网络浏览器中,转到以下地址。 这是将 API 代理配置为将请求转发到的目标服务,但您现在将直接命中它:
http://mocktarget.apigee.net
您应该成功收到以下响应:
Hello, Guest! -
失败
现在尝试调用您的 API 代理:
http://ORG_NAME-test.apigee.net/helloapikey
将
ORG_NAME替换为您的 Edge 组织的名称。如果没有验证 API 密钥政策,则此调用将返回与前一调用相同的 响应。但在这种情况下,您应该会收到以下错误响应:
{"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
也就是说,您未正确传递有效的 API 密钥(作为 查询参数)。
在接下来的步骤中,您将添加 API 产品。
添加 API 产品
如需使用 Apigee 界面添加 API 产品,请执行以下操作:
- 选择发布 > API 产品 (API Products)。
- 点击 \+API 产品 。
输入 API 产品的产品详情 。
字段 说明 名称 API 产品的内部名称。请勿在名称中指定特殊字符。
注意: API 产品一经创建,便无法再修改其名称。例如,helloworld_apikey-Product。显示名称 API 产品的显示名称。显示名用于 界面中,您可以随时进行修改。如果未指定,则系统会使用 Name 值。此字段会使用 Name 值自动填充;您可以修改或删除其内容。显示名可以包含特殊字符。例如, helloworld_apikey-Product.说明 API 产品的说明。例如, Test product for tutorial。环境 API 产品将允许访问的环境。 例如, test或prod。访问 选择公开。 自动批准访问请求 从任何应用启用此 API 产品 的密钥请求的自动批准。 Quota 在本教程中忽略。 允许的 OAuth 范围 在本教程中忽略。 - 在“API 资源”部分,选择您刚创建的 API 代理。例如,
helloworld_apikey。 - 点击添加 。
- 在路径 部分,添加路径“/”。
- 点击添加 。
- 点击保存 。
在接下来的步骤中,您将获得所需的 API 密钥。
将开发者和应用添加到您的 组织
接下来,我们将模拟开发者注册使用 API 的工作流。开发者将有一个或多个应用调用您的 API, 并且每个应用都会获得唯一的 API 密钥。这样,API 提供方就可以更 精细地控制对 API 的访问,并更精细地按应用报告 API 流量。
创建一个开发者
如需创建开发者,请执行以下操作:
- 在菜单中选择发布 > 开发者 。
- 点击 + 开发者 。
在“新开发者”窗口中输入以下内容:
在此字段中 Enter 名字 Keyser姓氏 Soze用户名 keyser电子邮件 keyser@example.com- 点击创建。
注册一个应用
如需注册开发者应用,请执行以下操作:
- 选择发布 > 应用。
- 点击 + 应用 。
在新应用 窗口中输入以下内容:
p在此字段中 执行该操作 名称和显示名 输入: keyser_app公司/开发者 选择: Developer开发者 选择: Keyser Soze (keyser@example.com)回调网址和备注 留空 - 在凭据 部分中,从 到期 菜单中选择永不 。此应用的凭据永不会过期。
- 在产品 下,点击添加产品 。
- 选择 helloworld_apikey-Product。
- 点击添加 。
- 点击应用详细信息 部分右上角的创建 以保存您的工作。
获取 API 密钥
如需获取 API 密钥,请执行以下操作:
- 在应用页面(发布 > 应用)上,点击 keyser_app。
在 keyser_app 页面上,点击 凭据 部分中 密钥 旁边的 显示 。在 产品 部分中, 请注意,该密钥与 helloworld_apikey 相关联
。
- 选择并复制密钥 。您将在下一步中用到它。
使用密钥调用 API
您拥有 API 密钥后,就可以使用它来调用 API 代理了。在网络浏览器中输入以下内容。 将您的 Edge 组织名称 替换为 ORG_NAME,并将 API 密钥替换为下面的 API_KEY。 确保查询参数中不存在额外空格。
http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY
现在,在调用 API 代理时,您应得到以下响应:
Hello, Guest!
恭喜!您创建了一个 API 代理,并要求在调用中包含有效的 API 密钥,以对其进行保护。
请注意,通常情况下,最好将 API 密钥作为 查询参数传递。您应该考虑 改为在 HTTP 标头中传递它。
最佳做法:在 HTTP 标头中传递密钥
在这一步中,您将修改代理,以在名为 x-apikey 的
标头中查找 API 密钥。
- 修改 API 代理。依次选择开发 > API 代理 > helloworld_apikey ,然后转到开发 视图。
-
选择验证 API 密钥政策,然后修改政策 XML 以指示 政策在
header而不是queryparam中查找:<APIKey ref="request.header.x-apikey"/>
- 保存 API 代理以部署更改。
-
使用 c网址 发出以下 API 调用,以将 API 密钥作为名为
x-apikey的 标头传递。别忘了替换您的 组织名称。curl -v -H "x-apikey: API_KEY" http://ORG_NAME-test.apigee.net/helloapikey
请注意,如需完全完成更改,您还需要配置 AssignMessage 政策以移除标头,而不是查询参数。 例如:
<Remove>
<Headers>
<Header name="x-apikey"/>
</Headers>
</Remove>
相关主题
以下是一些与本教程直接相关的主题:
深入探讨,使用 API 密钥保护 API 只是整个过程的一部分。API 保护通常涉及额外安全,例如 OAuth。
OAuth 是一种 开放式协议,简而言之,它用凭据(如用户名和密码)换取 访问令牌。访问令牌是长的随机字符串,即便是在应用之间,也可以在消息 流水线之间传递,而且不会影响原始凭据。访问 令牌通常具有短暂的生命,因此总是生成新的令牌。