我已经在Asp.net Core + Angular 5单页应用程序上设置了内部ADFS身份验证。身份验证是在Web API和MVC控制器上的Asp.Net级别完成的。 Angular 5应用程序嵌入在index.cshtml中。
身份验证可以很好地用于登录和注销。 但是,当用户浏览应用程序时,浏览器将触发预检请求到ADFS,这会阻止在此期间发出的发布请求。以下是我在浏览器控制台上遇到的错误
无法负载https://adfsxxxxxxxxxx/adfs/ls/?> wtrealm = XXXXX&WA = wsignin1.0&wreply = XXXXX%2Fsignin-> wsfed&wctx = CfDJ8Nyz41BVvQdBop5lee2HgGltVBEO-JXsCDT0Mbjno6BPcJNI1pFe-> mlNy0xonxmZzyhK1LGUKcaniahjJ6vDG3UQ-hdBf3XMQQF16cyXPglxcG6-> d1mHw1osMS77_pdCYMFT57iOcgCZ9x3hwjt6e_FzyXuOMeRhtzp_UB87m82OvvtZaqgj2Xvcic-> YuhwocmpzK73hpx-yk4sG7zCyDqDCEA_Ixel7EMwOx8NQc7OBPBWPtsPAIdGtag4OosgdZ-> 9tod_zKvV_rfhTtO-cdSQr002HvTPuLwktLw1t3- 7-:对预检请求的响应>未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许>原始“ https://xxxxxx”访问。
请告诉我是否有解决方案。谢谢。
下面是在StartUp.cs文件中设置ADFS身份验证的代码。
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = Configuration["wsfed:realm"];
options.MetadataAddress = Configuration["wsfed:metadata"];
}).AddCookie(cookieoption =>
{
cookieoption.Cookie.HttpOnly = true;
cookieoption.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
});
答案 0 :(得分:0)
如错误消息所述,由于源访问控制策略,预检请求失败。您需要启用/设置跨域资源共享(CORS)策略。
1。在Startup.ConfigureServices中使用GROK
方法创建CORS策略:
1/08/2010 6:15:00 PM
2。在启动中使用AddCors
启用CORS策略。
public void ConfigureServices(IServiceCollection services)
{
// Add Cors
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
// Add framework services.
services.AddMvc();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
});
...
...
...
}
我强烈建议您了解CORS,也请参阅Enable Cross-Origin Requests (CORS) in ASP.NET Core