Asp.Net Core + Angular SPA +内部ADFS跨源请求从客户端块UI触发到ADFS

时间:2018-08-25 15:10:32

标签: c# angular5 asp.net-core-2.0 adfs3.0

我已经在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;
        });

1 个答案:

答案 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