请参阅 有关 Azure API 管理 故障排除系列 的文章,这是实验室的第三个方案。 请确保已按照实验室设置说明 进行操作 ,以重新创建问题。

原始产品版本: API 管理服务
原始 KB 编号: 4464930

Echo API 在调用其下的操作时突然开始引发各种类型的 HTTP 401 - 未授权 错误。 “创建资源 ”和“检索资源 ”操作显示以下错误消息:

“statusCode”: 401,
“message”:“由于订阅密钥无效,访问被拒绝。 请确保为活动订阅提供有效的密钥。”

而其余操作显示

“statusCode”: 401,
“message”:“由于缺少订阅密钥,访问被拒绝。 向 API 发出请求时,请确保包含订阅密钥。”

所有操作的预期 HTTP 响应代码为 200,但响应正文将有所不同,因为后端 API 始终回显你作为请求正文发送的任何内容以及标头。

故障排除步骤

  • 若要获取对 API 的访问权限,开发人员必须首先订阅产品。 订阅时,他们会收到一个订阅密钥,该密钥作为请求标头的一部分发送,该密钥适用于该产品中的任何 API。 Ocp-Apim-Subscription-Key 是为与此 API 关联的产品的订阅密钥发送的请求标头。 将自动填充密钥。

  • 有关 由于订阅密钥无效而拒绝访问的错误。请确保为活动订阅提供有效的密钥 ,很明显,在调用 “创建资源” 和“ 检索资源 ”操作时发送了错误的 Ocp-Apim-Subscription-Key 请求标头值。

  • 登录后,可以通过导航到“ 配置文件 ”页,从 APIM 开发人员门户检查特定产品的订阅密钥,如下所示。

  • 选择“ 显示 ”按钮,查看已订阅的相应产品的订阅密钥。

  • 如果检查从“ 测试 ”选项卡发送的标头,你会发现 Ocp-Apim-Subscription-Key 请求标头的值错误。 你可能想知道这怎么可能,因为 APIM 会自动用正确的订阅密钥填充此请求标头。

  • 让我们检查“ 设计 ”选项卡下的 “创建资源 ”和“ 检索资源 操作”的前端定义。仔细检查后,你会注意到这些操作在“ 标头 ”选项卡下添加了 Ocp-Apim-Subscription-Key 请求标头的硬编码值。

  • 可以将其删除,这应该可以解决订阅密钥无效的问题,但仍会出现缺少订阅密钥错误。

    你可能会收到以下错误消息:

    HTTP/1.1 401 未授权

    内容长度:152
    Content-Type:application/json
    日期:2018年7月29日(星期日)14:29:50 GMT
    Vary: Origin WWW-Authenticate: AzureApiManagementKey realm=“” https://pratyay.azure-api.net/echo ,name=“Ocp-Apim-Subscription-Key”,type=“header” {
    “statusCode”: 401,
    “message”:“由于缺少订阅密钥,访问被拒绝。 向 API 发出请求时,请确保包含订阅密钥。”

  • 转到 Echo APIsettings 并检查它是否与任何可用产品相关联。 如果没有,则必须将此 API 与产品关联,以便获取订阅密钥。

    开发人员必须先订阅产品才能访问 API。 订阅时,他们将获得一个适用于该产品中任何 API 的订阅密钥。 如果创建了 APIM 实例,则你已经是管理员,因此默认情况下会订阅每个产品。

    联系我们寻求帮助

    如果你有任何疑问或需要帮助,请 创建支持请求 联系 Azure 社区支持 。 还可以向 Azure 社区支持 提交产品反馈。

  •