请参阅
有关 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 社区支持
提交产品反馈。