通过要求 API 密钥保护 API

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

学习内容

通过本教程,您将学会:

  • 创建需要 API 密钥的 API 代理。
  • 添加 API 产品。
  • 添加开发者并注册应用。
  • 使用 API 密钥调用 API。

请务必保护您的 API 免遭未经授权的访问。要想 可以通过 API 密钥(也称为公钥 密钥应用密钥)。

当应用向您的 API,应用必须提供有效的密钥。在运行时,“Verify API Key”政策 检查所提供的 API 密钥:

  • 有效
  • 尚未撤消
  • 与公开所请求 API 产品的 API 密钥相匹配 资源

如果密钥有效,则允许请求。如果密钥无效, 请求会导致授权失败。

在本教程中,您将创建一个需要有效 API 的 API 代理 访问该菜单。

所需条件

  • Apigee Edge 账号。如果您还没有账号,可以注册 其中包含 <ph type="x-smartling-placeholder"></ph> 创建 Apigee Edge 账号
  • 用于进行 API 调用的网络浏览器。
  • (对于额外赠金部分,无需提供) cURL 已安装 从命令行进行 API 调用。

创建 API 代理

关于“mocktarget”

mocktarget 服务托管在 Apigee 上,并返回简单 数据。它不需要 API 密钥或访问令牌。 事实上,您可以使用 。尝试通过点击以下网址访问:

http://mocktarget.apigee.net

目标返回 Hello, Guest!。使用 /help 查看其他可供使用的 API 资源的帮助页面

  1. 转到 https://apigee.com/edge 并登录。
  2. 点击您在 顶部导航栏顶部显示用户个人资料菜单,然后 从列表中选择该组织

    在用户个人资料菜单中选择组织
  3. 点击着陆页上的 API 代理以显示 API 代理列表。

    Edge API 菜单
  4. 点击 + Proxy
    创建代理按钮
  5. 创建代理页面上,选择反向代理(最常用)
  6. 代理详细信息页面上,按以下方式配置代理:
    在此字段中 执行该操作
    代理名称 输入:helloworld_apikey
    项目基本路径

    更改为:/helloapikey

    项目基本路径是 向 API 代理发送的请求

    注意:如需查看 Apigee 关于 API 版本控制的建议, 参见 Web API 设计:缺失的中的版本控制 链接电子书。

    现有 API

    输入:http://mocktarget.apigee.net

    定义 Apigee Edge 在 向 API 代理发送的请求

    说明 输入:hello world protected by API key
  7. 点击下一步
  8. 常用政策页面上的安全性: 授权,选择 API 密钥,然后点击下一步。这个 将向你的 API 代理添加两项政策
  9. Virtual Hosts(虚拟主机)页面上,选择 default(默认)和 secure,然后点击 Next。选择默认允许 使用 http:// 调用 API。选择 secure(安全) 可让您使用 https:// 调用 API。
  10. 摘要页面上,确保测试部署 选择环境,然后点击创建和部署
  11. 您将看到一条确认消息,表明您的新 API 代理和 API 已成功创建产品,并且 API 代理已部署到 测试环境
  12. 点击修改代理以显示概览 API 代理。

查看政策

  1. 在 API 代理编辑器中,点击开发标签页。您会看到 API 代理的请求流中添加了两项政策: <ph type="x-smartling-placeholder">
      </ph>
    • 验证 API 密钥:检查 API 调用以确保有效的 存在 API 密钥(作为查询参数发送)。
    • 移除查询参数 apikey:指定 在 API 密钥经过检查后移除该密钥,以免其 无谓地暴露在外
  2. 点击流程视图中的“Verify API Key 政策”图标,然后查看 此政策的 XML 配置。通过 <APIKey> 元素用于告知政策应在何处运行 在进行调用时查找 API 密钥。默认情况下,它会查找 键作为 HTTP 中名为 apikey 的查询参数 请求:

    <APIKey ref="request.queryparam.apikey" />
    

    apikey 是任意名称,可以是任意属性 包含该 API 密钥的 ID。

尝试调用 API

在此步骤中,您将直接对目标 您将对 API 代理进行失败的调用 但受到相关政策的保护

  1. 成功

    在网络浏览器中,转到以下地址。 这是 API 代理配置为转发的目标服务 但现在您会直接点击它:

    http://mocktarget.apigee.net
    

    您应该成功收到以下响应:Hello, Guest!

  2. 失败

    现在尝试调用您的 API 代理:

    http://ORG_NAME-test.apigee.net/helloapikey
    

    ORG_NAME 替换为您的 边缘组织。

    如果没有“验证 API 密钥”政策,此调用将为您提供相同的 与上一个调用相同。但在这种情况下,您应该获得 以下错误响应:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
    

    这意味着您并未传递有效的 API 密钥(如 查询参数)。

在接下来的步骤中,您将添加 API 产品。

添加 API 产品

如需使用 Apigee 界面添加 API 产品,请执行以下操作:

  1. 选择发布 > API 产品 (API Products)。
  2. 点击 +API 产品
  3. 为您的 API 产品输入商品详情

    字段 说明
    名称 API 产品的内部名称。错误做法 在名称中指定特殊字符。
    注意: 一旦 API 产品创建完毕,您便无法修改该名称。对于 示例 helloworld_apikey-Product
    显示名称 API 产品的显示名。显示名称用于 也可以随时进行修改如果未指定,则 将使用名称值。此字段使用 名称值;您可以修改或删除其内容显示屏 名称可以包含特殊字符。例如: helloworld_apikey-Product
    说明 API 产品的说明。例如 Test product for tutorial
    环境 API 产品允许访问的环境。 例如,testprod
    访问权限 选择公开
    自动批准访问请求 为此 API 启用密钥请求的自动批准功能 从任何应用获取商品。
    配额 在本教程中忽略。
    允许的 OAuth 范围 在本教程中忽略。
  4. 在“API 资源”部分中,选择您刚刚 创建。例如 helloworld_apikey
  5. 点击添加
  6. 路径部分中,添加路径“/”。
  7. 点击添加
  8. 点击保存

在接下来的步骤中,您将获得所需的 API 密钥。

将开发者和应用添加到您的 组织

接下来,我们将模拟开发者注册 使用您的 API。开发者将拥有一个或多个调用您的 API 的应用, 每个应用都会获得一个唯一的 API 密钥这为 API 提供商提供了 可以更精确地控制对 API 的访问权限,还可以生成更精细的报告 API 流量(按应用)。

创建一个开发者

如需创建开发者,请执行以下操作:

  1. 在菜单中选择 Publish > Developers
  2. 点击 + 开发者
  3. 在“新建开发者”窗口中输入以下内容:

    在此字段中 进入
    First Name(名字) Keyser
    姓氏 Soze
    用户名 keyser
    电子邮件 keyser@example.com
  4. 点击创建

注册一个应用

如需注册开发者应用,请执行以下操作:

  1. 选择发布 > 应用
  2. 点击 + 应用
  3. New App 窗口中输入以下内容:

    下午
    在此字段中 执行该操作
    名称显示名 输入:keyser_app
    公司/开发者 选择:Developer
    开发者 选择:Keyser Soze (keyser@example.com)
    回调网址备注 留空
  4. 凭据部分,选择从不 过期菜单。此应用的凭据永不会过期。
  5. 产品下,点击添加产品
  6. 选择 helloworld_apikey-Product
  7. 点击添加
  8. 点击应用详情上方和右侧的创建 部分,保存您的工作。

获取 API 密钥

如需获取 API 密钥,请执行以下操作:

  1. 应用页面(发布 > 应用),点击 keyser_app
  2. keyser_app 页面上,点击 Key 旁边的 Show凭据部分。在产品部分中, 请注意,该密钥与 helloworld_apikey 相关联,

    ,了解所有最新动态。
  3. 选择并复制密钥。您将在下一步中用到它。

使用密钥调用 API

您拥有 API 密钥后,就可以使用它来调用 API 代理了。进入 在您的网络浏览器中执行以下操作。请替换您的 Edge 组织名称 (针对 ORG_NAME)以及下方 API_KEY 的 API 密钥。 请确保查询参数中没有多余的空格。

http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY

现在,当您调用 API 代理时,应该会收到以下响应: Hello, Guest!

恭喜!您已创建 API 代理,并通过以下方式保护该代理: 要求在调用中包含有效的 API 密钥。

请注意,一般而言,将 API 密钥作为 查询参数。您应该考虑 <ph type="x-smartling-placeholder"></ph> 而是改为在 HTTP 标头中传递它

最佳做法:在 HTTP 标头中传递密钥

在此步骤中,您将修改代理以在 名为 x-apikey 的文件。

  1. 修改 API 代理。选择开发 >API 代理 > helloworld_apikey,然后转到开发视图。
  2. 选择 Verify API Key 政策,并修改政策 XML 以指示 在 header 而不是 queryparam:

    <APIKey ref="request.header.x-apikey"/>
    
  3. 保存 API 代理以部署更改。
  4. 使用 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 简单来说,该协议可用于交换凭据(如用户名和密码), 访问令牌。访问令牌是可以在消息中传递的长随机字符串 流水线,甚至可以从一个应用到另一个应用,而不会影响原始凭据。访问权限 令牌的生命周期通常很短,所以不断生成新令牌。