我正在将 .CORE 2.2 与 WebAPI 结合使用。 该解决方案托管在 IIS10 Windows Server 2016 上,Windows 身份验证应该是我的服务的唯一身份验证方法。 在 Angular 7 中,当我使用选项 withCredentials 设置为 true 发出 GET 请求时。一切都按预期进行。无论如何,对于此 Post 请求,它不起作用,并且响应为未经授权 401。 仅供引用,APi 和服务器 API 驻留在不同的服务器上。
post<T>(path, body = {}): Observable<T> {
let requestheaders = new HttpHeaders({
'Content-Type': 'application/json',
});
return this.http.post(this.getUrl(path), '{}',
{ headers: requestheaders, withCredentials: true }) as Observable<T>;
}
这不是 Cors 策略,因为 Cors 已正确配置
services.AddCors(options => options.AddPolicy("CorsPolicy",
builder =>
{
builder.WithOrigins("http://localhost:4200",
"https://localhost:4200")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
}));
和
app.UseCors("CorsPolicy");
有关如何处理此问题的任何线索吗?
最佳答案
- 在后端,将 AllowCredentials 或 SupportsCredentials 属性设置为 true
- 在您的后端中,不要将通配符 (
*
) 放入允许来源中。专门添加您的前端网址
类似这样的
.NET 核心
services.AddCors(c =>
{
c.AddPolicy("AllowOrigin",
options => options
.WithOrigins("http://localhost:4200") //Important
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials() //Important
);
});
或
services.AddCors();
var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy();
policy.Headers.Add("*");
policy.Methods.Add("*");
policy.Origins.Add("*");
policy.SupportsCredentials = true;
services.ConfigureCors(x=>x.AddPolicy("mypolicy", policy));
.NET 4.6
[EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*", SupportsCredentials = true)]
关于javascript - 发布请求时未经授权的 401 Windows 身份验证 + Core 2.2 WebAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57889509/