Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net核心&x2B;角度SPA+;从客户端块UI触发的对ADFS的本地ADFS跨源请求_C#_Angular5_Asp.net Core 2.0_Adfs3.0 - Fatal编程技术网

C# Asp.Net核心&x2B;角度SPA+;从客户端块UI触发的对ADFS的本地ADFS跨源请求

C# Asp.Net核心&x2B;角度SPA+;从客户端块UI触发的对ADFS的本地ADFS跨源请求,c#,angular5,asp.net-core-2.0,adfs3.0,C#,Angular5,Asp.net Core 2.0,Adfs3.0,我已经在我的Asp.net Core+Angular 5单页应用程序上设置了内部ADFS身份验证。身份验证是在Asp.Net的Web API和MVC控制器级别上完成的。Angular 5应用程序嵌入在index.cshtml中 身份验证在登录和注销时工作得非常好。 但当用户浏览应用程序时,会触发从浏览器到ADF的飞行前请求,这会阻止在此期间发出的post请求。下面是我在浏览器控制台上遇到的错误 加载失败该文的意思是:联邦政府和WTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTv

我已经在我的Asp.net Core+Angular 5单页应用程序上设置了内部ADFS身份验证。身份验证是在Asp.Net的Web API和MVC控制器级别上完成的。Angular 5应用程序嵌入在index.cshtml中

身份验证在登录和注销时工作得非常好。 但当用户浏览应用程序时,会触发从浏览器到ADF的飞行前请求,这会阻止在此期间发出的post请求。下面是我在浏览器控制台上遇到的错误

加载失败该文的意思是:联邦政府和WTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTvvvvvvvvvvvTvvvvvvvvvvvvvvvvvTvTvTvTvTvTvTvTvTvTvTvTvTvvGvBvBvBvBvBvBvBvvBvvvvBvvvvBvvvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvvvvvvvvvvvvvvvv6 6 6 6 6 6 6 6.vvvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvBvvv光碟SQr002HvTPuLwktLw1t3-7-:对飞行前请求的响应>未通过访问控制检查:请求的资源上不存在>任何“访问控制允许原点”标头。因此,不允许>访问源“”

请让我知道是否有解决方案。谢谢

下面是在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;
        });

正如错误消息所说,由于原点访问控制策略,飞行前请求失败。您需要启用/设置跨源资源共享(CORS)策略

1.使用Startup.ConfigureServices中的
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,并参考

我已经建立了CORS。但它仍然不起作用。我正在获取web api方法调用的http状态302。然后会自动触发对ADFS的get请求,从而导致问题。知道为什么返回302吗?设置CORS似乎根本不适用于单页应用程序。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // Enable Cors
    app.UseCors("MyPolicy");
    ...
    ...
    ...
}