在启用 Windows 身份验证的情况下,使用 ASP.NET Core 和 Aurelia(使用 http-fetch-client)设置 CORS 的正确方法是什么?
What is the correct way to setup CORS with ASP.NET Core and Aurelia (with http-fetch-client), with Windows authentication enabled?
启用 Windows (NTLM) 身份验证后,使用 ASP.NET Core 和 Aurelia http-fetch-client 发出 CORS 请求无法正常工作。
设置如下:
静态文件托管在 http://localhost:50927/
API 托管于 http://localhost:50928/
Aurelia HTTP 提取客户端已配置为使用 API 端口:
this.client = new HttpClient();
this.client.configure((config: any) => {
config.withBaseUrl('http://localhost:50928/api/')
}
ASP.NET 核心 API 服务器已配置为在 Startup.cs
中使用 CORS
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
但是,当启用 Windows 身份验证时,对 API 的请求失败并且网络浏览器控制台显示以下内容
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:50928/api/sifiri/get-all-reports. (Reason: CORS header 'Access-Control-Allow-Origin' missing).[Learn More]
如果 Windows 身份验证被禁用并且仅启用匿名身份验证,则 CORS 请求可以正常工作。有什么解决办法吗?所有正确的设置似乎都已启用,除非我遗漏了什么
编辑:禁用 "Just my code" 后,控制台中显示相关异常:
Exception thrown: 'System.Net.Sockets.SocketException' in Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
Exception thrown: 'System.Net.Sockets.SocketException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in System.Net.Sockets.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Net.Http.dll
Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Private.CoreLib.dll
Exception thrown: 'System.ObjectDisposedException' in System.Net.Sockets.dll
Exception thrown: 'System.ObjectDisposedException' in System.Private.CoreLib.dll
Exception thrown: 'System.ObjectDisposedException' in System.Private.CoreLib.dll
没有提供更多信息
您只需要在进行 fetch
调用时包含 credentials
和 mode
。这应该如下所示:
this.client
.fetch(apiUrl, {
mode: "cors",
credentials: "include",
...
})
有了这个,您基本上是在要求浏览器在获取请求中包含用户凭据。而且,这应该足够了,因为您已经在服务上配置了 CORS 以包括客户端 origin/header/method 等
希望对您有所帮助。
启用 Windows (NTLM) 身份验证后,使用 ASP.NET Core 和 Aurelia http-fetch-client 发出 CORS 请求无法正常工作。 设置如下:
静态文件托管在 http://localhost:50927/
API 托管于 http://localhost:50928/
Aurelia HTTP 提取客户端已配置为使用 API 端口:
this.client = new HttpClient();
this.client.configure((config: any) => {
config.withBaseUrl('http://localhost:50928/api/')
}
ASP.NET 核心 API 服务器已配置为在 Startup.cs
中使用 CORSapp.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
但是,当启用 Windows 身份验证时,对 API 的请求失败并且网络浏览器控制台显示以下内容
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:50928/api/sifiri/get-all-reports. (Reason: CORS header 'Access-Control-Allow-Origin' missing).[Learn More]
如果 Windows 身份验证被禁用并且仅启用匿名身份验证,则 CORS 请求可以正常工作。有什么解决办法吗?所有正确的设置似乎都已启用,除非我遗漏了什么
编辑:禁用 "Just my code" 后,控制台中显示相关异常:
Exception thrown: 'System.Net.Sockets.SocketException' in Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
Exception thrown: 'System.Net.Sockets.SocketException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in System.Net.Sockets.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Net.Http.dll
Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Private.CoreLib.dll
Exception thrown: 'System.ObjectDisposedException' in System.Net.Sockets.dll
Exception thrown: 'System.ObjectDisposedException' in System.Private.CoreLib.dll
Exception thrown: 'System.ObjectDisposedException' in System.Private.CoreLib.dll
没有提供更多信息
您只需要在进行 fetch
调用时包含 credentials
和 mode
。这应该如下所示:
this.client
.fetch(apiUrl, {
mode: "cors",
credentials: "include",
...
})
有了这个,您基本上是在要求浏览器在获取请求中包含用户凭据。而且,这应该足够了,因为您已经在服务上配置了 CORS 以包括客户端 origin/header/method 等
希望对您有所帮助。