PUT 请求抛出 403 CORS 错误 Asp.Net Core 3.1 + Vue3 +IIS10
Posted
技术标签:
【中文标题】PUT 请求抛出 403 CORS 错误 Asp.Net Core 3.1 + Vue3 +IIS10【英文标题】:PUT requests are throwing 403 CORS error Asp.Net Core 3.1 + Vue3 +IIS10 【发布时间】:2022-01-18 20:07:30 【问题描述】:我花了一整天的时间试图找到解决方案,并在这些 SOF 帖子here、here 和 here 中尝试了几乎所有最高票数的答案。
所以情况如下:
GET 和 POST 请求工作正常 PUT 请求抛出 403,如下所示我们目前没有任何 DELETE 请求来测试这是否也有效
我们有两个存储库 (1) 后端 API - 使用 .Net Core 3.1 和 (2) Vue3/typescript/Axios 客户端,部署到两个域,api 到 my-api.blahblah.com
和 web 客户端到 www.blahblah.com
。也许相关或不相关,但它位于运行 Windows Server 2019 和 IIS10 的 VPS 上。有两个独立的原因是让它们独立部署,独立的管道设置并正常工作。
startup.cs 中的 CORS 设置如下所示,我根据上面 SOF 链接的答案尝试了不同的变体:
services.AddCors(options =>
options.AddPolicy("CorsPolicy", policy =>
policy
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
);
);
...
app.UseCors("CorsPolicy");
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
Web 客户端的 web.config 文件如下所示:
api 域的 web.config 是这样的:
希望我已经添加了足够的信息,但如果我遗漏了什么,请告诉我。
我觉得我错过了一些非常微不足道的东西来让 PUT 请求工作,但也许是我糟糕的一天。
提前致谢。
编辑 1:附加信息
通过 POSTMAN 的请求也以 403 失败。 应用程序在本地 IIS(开发机器)上运行良好。编辑 2:
DELETE 无法正常工作,引发相同的 CORS 错误 这不是身份验证问题,因为我将 [AllowAnnonymous] 放置在 API 中的几个 PUT 和 DELETE 端点上并重新部署它,但仍然遇到与以前相同的错误 允许匿名访问下面的 PUT 端点后来自 IIS 的最后一些条目(PUT 上的通知 403):2021-12-15 19:29:37 SERVER_IP_REDACTED GET /api/employeeAddress PageIndex=0&PageSize=10 443 - MY_IP_REDACTED HTTP/2 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(Khtml,+like+Gecko)+Chrome/xx.xx.xx.xx+Safari/537.36 https://WEBSITE_NAME_REDACTED/ MY_API 200 0 0 718 1558 364
2021-12-15 19:29:49 SERVER_IP_REDACTED OPTIONS /api/employeeAddress/10 - 443 - MY_IP_REDACTED HTTP/2 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/xx.xx.xx.xx+Safari/537.36 https://WEBSITE_NAME_REDACTED/ MY_API 204 0 0 305 623 70
2021-12-15 19:29:49 SERVER_IP_REDACTED GET /api/employeeAddress/10 - 443 - MY_IP_REDACTED HTTP/2 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/xx.xx.xx.xx+Safari/537.36 https://WEBSITE_NAME_REDACTED/ MY_API 200 0 0 393 1537 95
2021-12-15 19:29:55 SERVER_IP_REDACTED OPTIONS /api/employeeAddress/10 - 443 - MY_IP_REDACTED HTTP/2 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/xx.xx.xx.xx+Safari/537.36 https://WEBSITE_NAME_REDACTED/ MY_API 204 0 0 318 636 84
2021-12-15 19:29:55 SERVER_IP_REDACTED PUT /api/employeeAddress/10 - 443 - MY_IP_REDACTED HTTP/2 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/xx.xx.xx.xx+Safari/537.36 https://WEBSITE_NAME_REDACTED/ MY_API 403 0 0 1452 1712 74
编辑 3 EmployeeAddressController 截图按要求:
【问题讨论】:
请显示employeeAddress方法 @Mustafa 请参阅编辑 3,添加了屏幕截图。 根据您的描述很难重现您的问题,建议您通过support.microsoft.com开一个案例。 如果它在本地 IIS 上运行良好,那么您应该检查部署服务器上的任何最新更改。可能是应用程序目录权限的更改导致了这种情况。 嗨@Oleh,请在下面查看我的回答 【参考方案1】:这不是我如何配置管道或 Cors 的问题。
正如我在问题中提到的,我使用的是 VPS 托管,ModSecurity(防火墙)设置有一些阻止这些请求的规则。我不得不联系托管服务提供商的客户支持,他们一一关闭了一些规则。
即便如此,一些 PUT/DELETE 端点仍在工作,而其他端点开始抛出 405(而不是我最初得到的 403)。
为了修复 405 错误,我在 web.config 文件中添加了以下内容:
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="aspNetCore" />
<remove name="WebDAV" />
<!-- I removed the following handlers too, but these
can probably be ignored for most installations -->
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="aspNetCore"
path="*"
verb="*"
modules="AspNetCoreModuleV2"
resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\xxx.xxxxxxx.WebApi.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
这为我解决了这个问题。然而,我已经从 VPS 转移到 Azure App Service,我艰难地了解到 VPS 可能更便宜,但不值得这么麻烦。 webapi 在 azure 中发布到应用服务后开箱即用,无需更改。
【讨论】:
在我的情况下,这可能也是防火墙的问题,但在客户端(用户)方面。我们的系统中有很多用户,只有 2 人报告了这个问题。【参考方案2】:你读过https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-6.0吗?
上面写着:
调用 UseCors 扩展方法并指定 _myAllowSpecificOrigins CORS 策略。 UseCors 添加了 CORS 中间件。对 UseCors 的调用必须放在 UseRouting 之后,但在 UseAuthorization 之前。有关详细信息,请参阅中间件顺序。
您的UseCors
顺序错误。
此外,响应标头是什么?它提到CORS吗?这也可能有助于了解。
另外,看看 *** 的问题指南。在这些情况下,包含您的问题的示例小项目的链接会很有用,因为这样人们就可以调试它并更好地帮助您。
【讨论】:
作为记录,我没有对此投反对票,尽管这并没有解决我的问题,但这有助于我检查响应标题并且其他一切都井井有条。以上是关于PUT 请求抛出 403 CORS 错误 Asp.Net Core 3.1 + Vue3 +IIS10的主要内容,如果未能解决你的问题,请参考以下文章
使用具有多个来源的 PUT 和 DELETE 请求时如何解决 ASP.NET Web API CORS Preflight 问题?