cors - ASP.NET Core 3.1 + CORS + Windows 身份验证 = 401 未经授权
问题描述
我已经在 IIS 10 上托管的 .NET Core 3.1(.201) Web API 中配置了IIS CORS 模块,现在我收到401 Unauthorized
了针对 Windows 身份验证用户的 GET(不是 OPTIONS)请求,无论是否具有控制器或操作级别的[Authorize]
属性。Swagger 反而通过,在同一个动作中返回 200,所以我认为授权有效,因此问题一定与 CORS 有关。
我已经看到了一些启用匿名身份验证和设置一些授权过滤器的解决方法,Startup.cs
但我想坚持使用 IIS CORS 模块,因为它旨在正确涵盖这种情况等。
所以也许有人可以帮我弄清楚我做错了什么。
网络配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
<location path="." inheritInChildApplications="false">
<system.webServer>
<cors enabled="true" failUnlistedOrigins="false">
<add origin="http://localhost:4300" allowCredentials="true">
<allowHeaders allowAllRequestedHeaders="true">
<add header="credentials" />
</allowHeaders>
</add>
</cors>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="...\bin\Debug\netcoreapp3.1\MyProj.Api.exe" hostingModel="InProcess" forwardWindowsAuthToken="true">
<environmentVariables>
<environmentVariable name="COMPLUS_ForceENC" value="1" />
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
启动.cs
services.AddAuthentication(IISDefaults.AuthenticationScheme);
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseStaticFiles();
app.UseEndpoints(endpoints => ...
javascript 请求(使用fetch API
)设置credentials: include
标头。
我还尝试了 Rick Strahl在其出色的网络日志中建议的方法,但得到了相同的结果:401
解决方案
您是否尝试在 Startup 类中添加 CORS?
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
...
}
在 Configure 方法中:
app.UseCors("CorsPolicy");
推荐阅读
- r - 如何在多次出现的模式上剪切子字符串?
- cakephp - 无法保存关联 (hasOne) 数据
- html - 如果背景图像放在另一个标签中,CSS mix-blend-mode 不起作用
- hive - hive 脚本由于堆空间问题而失败,无法处理太多分区
- sql - 同一个对象上带有键锁(UPDLOCK、ROWLOCK、HOLDLOCK)的 SQL 死锁
- r - 如何在 R 编程中为我的输出创建 csv
- java - 我正在尝试将 MySQL 连接器从版本 5 升级到版本 8,但出现以下错误。休眠 3 不支持 MySQL 8 吗?
- javascript - Ace 编辑器,toUpperCase 函数有效,但 toggleCommentLines 无效
- server - 连接到服务器 Pixel Streaming Unreal Engine 后出错
- python - 如何获取硒元素的屏幕坐标?[Python]