[英]Secure APIM APIs using Azure Active Directory without login page
[英]Unable to send test requests to backend APIs using the Azure APIM interactive portal
使用 Azure 门户,我无法向 Echo API(以及所有其他后端 API)发送测试请求。
发送请求时,出现以下错误:
HTTP/1.1 401 Access Denied
cache-control: private, s-maxage=0
content-length: 152
content-type: application/json
date: Tue, 12 Apr 2022 05:13:28 GMT
vary: Origin
www-authenticate: AzureApiManagementKey realm="https://AAAA.azure-api.net/echo",name="Ocp-Apim-Subscription-Key",type="header"
{
"statusCode": 401,
"message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API."
}
当我勾选“绕过 CORS 代理”复选框并通过 Postman 时,请求工作正常。
我有以下全球入站 CORS 政策:
<policies>
<inbound>
<cors allow-credentials="true">
<allowed-origins>
<origin>https://AAAA.developer.azure-api.net</origin>
<origin>https://AAAA.azure-api.net</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="300">
<method>*</method>
</allowed-methods>
<allowed-headers>
<header>*</header>
</allowed-headers>
<expose-headers>
<header>*</header>
</expose-headers>
</cors>
</inbound>
<backend>
<forward-request />
</backend>
<outbound />
<on-error />
</policies>
以及在 Echo API 上设置的入站基本策略。
我以前没有遇到过这个问题。 在 APIM 门户中提交测试请求时,有什么想法可以避免 CORS 错误吗?
HTTP/1.1 401 Access Denied
www-authenticate: AzureApiManagementKey realm="https://AAAA.azure-api.net/echo",name="Ocp-Apim-Subscription-Key",type="header"
"message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API."
在Troubleshooting Steps of Unauthorized errors (401) while invoking APIs in Azure中,明确提到:
Ocp-Apim-Subscription-Key
,出现了这个错误。创建 APIM 时,Echo API 默认订阅内置订阅。 每个订阅都有两个可以使用的订阅密钥。
场景 1 :
默认情况下,Echo API 已注册到内置全访问订阅,因此在订阅密钥匹配之前它将完美运行:
场景 2:
创建 APIM 实例时,默认情况下还有 2 个产品订阅,即 Starter 和 Unlimited。
当 API 订阅该产品订阅时,传入 header 的订阅密钥应与订阅菜单中提供的原始产品订阅密钥相匹配。
在这里,Echo API 订阅了产品 Starter 和 Unlimited,如第一张图片所示。 该产品订阅已授予一些权限,称为管理员、开发人员和来宾。 其中任何一个都应该让用户访问订阅这些产品的 API。
在第三张图片中,您可以看到哪些 API 订阅了入门产品,例如 Echo API。
如果上述任何解决方法未能解决问题,请参阅提供的故障排除步骤文档,其中显示了产生此特定错误401 Unauthorized and Missing the Subscription Key
的所有原因以及解决方法。
ByPass CORS 选项允许来自任何域的请求。 有时,允许跨域访问也可以解决问题。 尝试如下所示的 Azure 跨域策略以允许从“任何”域访问(您也可以指定您的域)。
<cross-domain>
<cross-domain-policy>
<allow-http-request-headers-from domain='*' headers='*' />
</cross-domain-policy>
有关详细信息,请参阅有关管理跨域访问的 MS 文档: https://learn.microsoft.com/en-us/azure/api-management/api-management-cross-domain-policies
我已就此与 Microsoft 进行了接触,他们正在调查此问题。 根据 MS 的初步调查,“Microsoft Defender for Cloud Apps”创建了一个代理,拦截所有从 Azure 门户发出的请求,看起来 MCAS 代理正在从传出请求中删除或修改标头,从而导致此行为。微软指出以下文档供参考: 故障排除 - 什么是 cas.ms、mcas.ms 或 mcas-gov.us?。MS表示他们没有任何修复的 ETA,并且他们正在进一步调查。他们的建议是暂时检查绕过 CORS 代理选项作为解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.