调用 API 时出现未经授权的错误(401)
参考有关 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
“内容类型”: 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 反馈社区。