教程:转换和保护 API

本教程介绍如何转换 API,使其不会透露私密的后端信息。 例如,你可能想要隐藏有关后端上运行的技术堆栈的信息。 此外,还可能想要隐藏 API HTTP 响应正文中显示的原始 URL,而不是将其重定向到 APIM 网关。

本教程介绍如何使用 Azure API 管理配置速率限制,轻松为后端 API 添加保护。 例如,你可能想要限制 API 调用的速率,以使开发人员不会过度使用该 API。 有关详细信息,请参阅 API 管理策略

在本教程中,你将了解如何执行以下操作:

  • 转换 API 以剥离响应标头
  • 将 API 响应正文中的原始 URL 替换为 APIM 网关 URL
  • 通过添加速率限制策略(限制)来保护 API
  • 测试转换

门户中的策略

先决条件

转到你的 API 管理实例

  1. 登录到 Azure 门户

  2. 选择“所有服务”。

  3. 在搜索框中输入 api

  4. 在搜索结果中,选择“API 管理服务”。

  5. 选择自己的 API 管理服务实例。

提示

若要将 API 管理添加到 Azure 门户中的收藏夹,请选择星形。

API 管理图标(API 管理图标)现在显示在门户的左侧菜单中。

转换 API 以剥离响应标头

本部分介绍如何隐藏不想向用户显示的 HTTP 标头。 此示例介绍如何在 HTTP 响应中删除以下标头:

  • X-Powered-By
  • X-AspNet-Version

测试原始响应

若要查看原始响应,请执行以下操作:

  1. 在 API 管理服务实例中,选择“API”。
  2. 在 API 列表中选择“演示会议 API”。
  3. 选择屏幕顶部的“测试”选项卡。
  4. 选择“GetSpeakers”操作,并选择“发送” 。

原始响应应类似于以下形式:

原始 API 响应

可以看到,响应包括“X-AspNet-Version”和“X-Powered-By”标头 。

设置转换策略

  1. 选择“演示会议 API” > “设计” > “所有操作” 。

  2. 在“出站处理”部分,选择代码编辑器 (</>) 图标 。

    导航到出站策略

  3. 将光标置于“<出站>”元素内,然后选择上角的“显示片段” 。

  4. 在右侧窗口中的“转换策略”下,选择”设置 HTTP 标头”两次(以插入两个策略片段) 。

    设置 HTTP 标头策略

  5. 按如下所示修改 <outbound> 代码:

    <set-header name="X-Powered-By" exists-action="delete" />
    <set-header name="X-AspNet-Version" exists-action="delete" />
    

    设置 HTTP 标头

  6. 选择“保存”。

将 API 响应正文中的原始 URL 替换为 APIM 网关 URL

本部分介绍如何隐藏 API HTTP 响应正文中显示的原始 URL,而不是将其重定向到 APIM 网关。

测试原始响应

若要查看原始响应,请执行以下操作:

  1. 选择“演示会议 API” > “测试” 。

  2. 选择“GetSpeakers”操作,并选择“发送” 。

    可以看到,响应包括原始后端 URL:

    响应中的原始 URL

设置转换策略

  1. 选择“演示会议 API” > “所有操作” > “设计” 。
  2. 在“出站处理”部分,选择代码编辑器 (</>) 图标 。
  3. 将光标置于“<出站>”元素内,然后选择上角的“显示片段” 。
  4. 在右侧窗口中的“转换策略”下,选择“在内容中屏蔽 URL” 。
  5. 选择“保存”。

通过添加速率限制策略(限制)来保护 API

本部分介绍如何通过配置速率限制来为后端 API 添加保护。 例如,你可能想要限制 API 调用的速率,以使开发人员不会过度使用该 API。 在此示例中,对每个订阅 ID 的限制设置为每 15 秒调用 3 次。 15 秒后,开发人员可以重试调用该 API。

  1. 选择“演示会议 API” > “所有操作” > “设计” 。

  2. 在“入站处理”部分中,选择代码编辑器 (</>) 图标 。

  3. 将光标置于“<>”元素内,然后选择上角的“显示片段” 。

    设置入站策略

  4. 在右侧窗口中的“访问限制策略”下,选择“+ 限制每个键的调用速率” 。

  5. 将 rate-limit-by-key 代码(在 <inbound> 元素中)修改为以下代码 :

    <rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
    

测试转换

此时如果查看代码编辑器中的代码,则会发现策略如下所示:

<policies>
   <inbound>
     <rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
     <base />
   </inbound>
   <backend>
     <base />
   </backend>
   <outbound>
     <set-header name="X-Powered-By" exists-action="delete" />
     <set-header name="X-AspNet-Version" exists-action="delete" />
     <redirect-content-urls />
     <base />
   </outbound>
   <on-error>
     <base />
   </on-error>
</policies>

本部分的余下内容介绍如何测试本文中设置的策略转换。

测试剥离响应标头

  1. 选择“演示会议 API” > “测试” 。

  2. 选择“GetSpeakers”操作,并选择“发送” 。

    可以看到,标头已剥离:

    剥离的响应标头

测试替换 URL

  1. 选择“演示会议 API” > “测试” 。

  2. 选择“GetSpeakers”操作,并选择“发送” 。

    可以看到,URL 已替换。

    替换的 URL

测试速率限制(限制)

  1. 选择“演示会议 API” > “测试” 。

  2. 选择“GetSpeakers”操作。 连续选择“发送”三次。

    发送请求 3 次之后,会收到“429 请求过多”响应。

    请求过多

  3. 等待大约 15 秒,然后再次选择“发送”。 此时应会收到“200 正常”响应。

后续步骤

在本教程中,你了解了如何执行以下操作:

  • 转换 API 以剥离响应标头
  • 将 API 响应正文中的原始 URL 替换为 APIM 网关 URL
  • 通过添加速率限制策略(限制)来保护 API
  • 测试转换

转到下一教程: