无法使用 Azure APIM 交互式门户将测试请求发送到后端 API
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.
上设置的入站 base 策略
我以前没有遇到过这个问题。在 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 默认订阅 built-in。
每个订阅都有两个订阅密钥可以使用。
场景 1:
默认情况下,Echo API 已注册到 Built-in all-access 订阅,因此在匹配订阅密钥之前它将完美运行:
场景二:
创建 APIM 实例时,默认情况下还有 2 个产品订阅,即 Starter 和 Unlimited。
当 API 订阅该产品订阅时,传入 header 的订阅密钥应与订阅菜单中可用的原始产品订阅密钥相匹配。
这里,Echo API 订阅了产品 Starter 和 Unlimited,如第一张图片所示。
该产品订阅已授予一些权限,称为管理员、开发人员和来宾。其中任何一个都应该让用户访问 API 订阅了这些产品。
在第 3 个图像中,您可以看到有 API 订阅了 Echo API 等入门产品。
如果上述任何解决方法均未解决问题,请参阅提供的故障排除步骤文档,其中显示了产生此特定错误的所有原因 401 Unauthorized and Missing the Subscription Key
连同决议。
ByPass CORS 选项允许来自任何域的请求。有时,允许 cross-domain 访问也可以解决问题。尝试下面给出的 Azure Cross-domain 策略以允许从 'any' 域访问(您也可以指定您的域)。
<cross-domain>
<cross-domain-policy>
<allow-http-request-headers-from domain='*' headers='*' />
</cross-domain-policy>
有关详细信息,请参阅有关管理跨域访问的 MS 文档:https://docs.microsoft.com/en-us/azure/api-management/api-management-cross-domain-policies
我已就此与 Microsoft 进行了接触,他们正在调查此问题。根据 MS 的初步调查,“Microsoft Defender for Cloud Apps”创建了一个代理来拦截所有从 Azure 门户发出的请求,并且 MCAS 代理似乎正在从传出请求中删除或修改 headers,从而导致此行为。Microsoft已指向以下文档以供参考:Troubleshooting - What is cas.ms, mcas.ms, or mcas-gov.us?。MS 已告知他们没有任何修复的 ETA,并且他们正在进一步调查。他们的建议是检查绕过 CORS 代理选项作为解决方法暂时.
使用 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 策略:
<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.
上设置的入站 base 策略我以前没有遇到过这个问题。在 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 默认订阅 built-in。 每个订阅都有两个订阅密钥可以使用。
场景 1:
默认情况下,Echo API 已注册到 Built-in all-access 订阅,因此在匹配订阅密钥之前它将完美运行:
场景二:
创建 APIM 实例时,默认情况下还有 2 个产品订阅,即 Starter 和 Unlimited。
当 API 订阅该产品订阅时,传入 header 的订阅密钥应与订阅菜单中可用的原始产品订阅密钥相匹配。
这里,Echo API 订阅了产品 Starter 和 Unlimited,如第一张图片所示。
在第 3 个图像中,您可以看到有 API 订阅了 Echo API 等入门产品。
如果上述任何解决方法均未解决问题,请参阅提供的故障排除步骤文档,其中显示了产生此特定错误的所有原因 401 Unauthorized and Missing the Subscription Key
连同决议。
ByPass CORS 选项允许来自任何域的请求。有时,允许 cross-domain 访问也可以解决问题。尝试下面给出的 Azure Cross-domain 策略以允许从 'any' 域访问(您也可以指定您的域)。
<cross-domain>
<cross-domain-policy>
<allow-http-request-headers-from domain='*' headers='*' />
</cross-domain-policy>
有关详细信息,请参阅有关管理跨域访问的 MS 文档:https://docs.microsoft.com/en-us/azure/api-management/api-management-cross-domain-policies
我已就此与 Microsoft 进行了接触,他们正在调查此问题。根据 MS 的初步调查,“Microsoft Defender for Cloud Apps”创建了一个代理来拦截所有从 Azure 门户发出的请求,并且 MCAS 代理似乎正在从传出请求中删除或修改 headers,从而导致此行为。Microsoft已指向以下文档以供参考:Troubleshooting - What is cas.ms, mcas.ms, or mcas-gov.us?。MS 已告知他们没有任何修复的 ETA,并且他们正在进一步调查。他们的建议是检查绕过 CORS 代理选项作为解决方法暂时.