使用订阅保护 API

已完成

通过 API 管理发布 API 时,使用订阅密钥保护对这些 API 的访问容易且常见。 需要使用已发布 API 的开发人员在调用这些 API 时必须在 HTTP 请求中包括一个有效的订阅密钥。 否则,API 管理网关会立即拒绝调用。 不会将它们转发到后端服务。

若要获取访问 API 所需的订阅密钥,必须拥有订阅。 订阅实质上是一个已命名的容器,该容器包含一对订阅密钥。 需要使用已发布 API 的开发人员可以获取订阅。 不需要 API 发布者批准。 API 发布者也可以直接为 API 使用者创建订阅。

注意

API 管理还支持其他机制来保护对 API 的访问,其中包括 OAuth2.0、客户端证书和 IP 允许列表。

订阅和密钥

订阅密钥是唯一自动生成的密钥,可以通过客户端请求的标头进行传递,也可以作为查询字符串参数进行传递。 密钥与订阅直接相关,后者可限定到不同的区域。 订阅使你能够精确地控制权限和策略。

三个主要订阅范围是:

范围 详细信息
所有 API 适用于每个可从网关访问的 API
单个 API 此范围适用于单个导入的 API 及其所有终结点
产品 产品是你在 API 管理中配置的一个或多个 API 的集合。 可以将 API 分配给多个产品。 产品可具有不同的访问规则、使用配额和使用条款。

用于调用受保护 API 的应用程序必须在每个请求中包含密钥。

随时都可重新生成这些订阅密钥,例如怀疑已与未经授权的用户共享密钥时。

Image showing the Subscriptions screen.

每个订阅具有两个密钥,即主要密钥和辅助密钥。 具有两个密钥可为重新生成密钥提供便利。 例如,如果希望更改主要密钥并避免停机,可在应用中使用辅助密钥。

对于已启用订阅的产品,客户端必须在调用该产品中的 API 时提供密钥。 开发人员可通过提交订阅请求来获取密钥。 如果你批准该请求,则必须安全地向他们发送订阅密钥,例如,通过加密邮件。 此步骤是 API 管理工作流的核心部分。

使用订阅密钥调用 API

调用受订阅保护的 API 终结点时,应用程序必须在所有 HTTP 请求中包含有效的密钥。 密钥可在请求标头中传递,也可以在 URL 中以查询字符串的形式传递。

默认标头名称为 Ocp-Apim-Subscription-Key,默认查询字符串为 subscription-key。

若要测试 API 调用,可以使用开发人员门户或 curl 等命令行工具。 以下是使用开发人员门户的 GET 请求示例,其中显示了订阅密钥标头:

Call API from developer portal

以下是使用 curl 在请求标头中传递密钥的方式:

curl --header "Ocp-Apim-Subscription-Key: <key string>" https://<apim gateway>.azure-api.net/api/path

以下是以查询字符串形式在 URL 中传递密钥的 curl 命令示例:

curl https://<apim gateway>.azure-api.net/api/path?subscription-key=<key string>

如果密钥没有在标头中传递,也没有以查询字符串形式在 URL 中传递,则 API 网关会发出“401 拒绝访问”响应