教程:转换和保护 API

本教程介绍如何配置常用策略来转换 API。 你可能想要转换 API,以避免它透露私密的后端信息。 转换 API 有助于隐藏后端中运行的技术堆栈信息,或隐藏 API HTTP 响应正文中显示的原始 URL。

本教程还介绍如何通过配置速率限制策略为后端 API 添加保护,使开发人员不会过度使用 API。 有关更多策略选项,请参阅 API 管理策略

注意

API 管理默认配置全局 forward-request 策略。 网关需有 forward-request 策略才能完成对后端服务发出的请求。

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

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

Policies in portal

先决条件

转到你的 API 管理实例

  1. 在 Azure 门户中搜索并选择“API 管理服务” 。

    Select API Management services

  2. 在“API 管理”服务页上,选择你的 API 管理实例。

    Select your API Management instance

转换 API 以剥离响应标头

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

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

测试原始响应

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

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

原始 API 响应应类似于以下响应:

Original API response

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

设置转换策略

此示例演示如何使用基于窗体的策略编辑器,该编辑器可帮助你配置许多策略,而无需直接编辑策略 XML 语句。

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

  2. 在“出站处理”部分,选择“+ 添加策略”。

    Navigate to outbound policy

  3. 在“添加出站策略”窗口中,选择“设置标头”。

    Set HTTP header policy

  4. 若要配置“设置标头”策略,请执行以下操作:

    1. 在“名称”下,输入“X-Powered-By”。 在“操作”下,选择“删除”。
    2. 选择“+ 添加标头”。
    3. 在“名称”下,输入“X-AspNet-Version”。 在“操作”下,选择“删除”。

    Set HTTP header

  5. 选择“保存”。 “出站处理”部分会显示两个 set-header 策略元素。

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

本部分介绍如何将 API HTTP 响应正文中显示的原始 URL 替换为 API 管理网关 URL。 你可能想要对用户隐藏原始后端 URL。

测试原始响应

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

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

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

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

    Original URLs in response

设置转换策略

在此示例中,你将使用策略代码编辑器直接向策略定义添加策略 XML 代码片段。

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

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

    Navigate to outbound policy code editor

  3. 将光标放在 <outbound> 元素中的空白行上。 然后在屏幕右上角选择“显示代码片段”。

    Select show snippets

  4. 在右侧窗口中的“转换策略”下,选择“在内容中屏蔽 URL” 。

    <redirect-content-urls /> 元素将添加到光标处。

    Mask URLs in content

  5. 选择“保存”。

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

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

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

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

    Navigate to inbound policy

  3. 将光标放在 <inbound> 元素中的空白行上。 然后在屏幕右上角选择“显示代码片段”。

    Set inbound policy

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

    <rate-limit-by-key /> 元素将添加到光标处。

    Select limit call rate per key

  5. <inbound> 元素中的 <rate-limit-by-key /> 代码修改为以下代码。 再选择“保存”。

    <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”操作,并选择“发送” 。

    可以看到,标头已剥离:

    Stripped response headers

测试替换 URL

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

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

    可以看到,URL 已被替换。

    Replaced URLs

测试速率限制(限制)

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

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

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

    Too many requests

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

后续步骤

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

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

转到下一教程: