Asp.Net Core + Angular SPA + на локальном запросе ADFS кросс-источника к ADFS, запущенному из клиентских блоков UI - PullRequest
0 голосов
/ 25 августа 2018

Я настроил локальную аутентификацию ADFS в своем приложении Asp.net Core + Angular 5 Single page. Аутентификация выполняется на уровне Asp.Net на контроллерах Web API и MVC. Приложение 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' не> разрешено.

Пожалуйста, дайте мне знать, если есть решение для этого. Спасибо.

Ниже приведен код для настройки аутентификации ADFS в файле StartUp.cs.

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 голосов
/ 27 августа 2018

Как говорится в сообщении об ошибке, предварительный запрос не выполняется из-за исходной политики управления доступом. Вам необходимо включить / установить политику общего доступа к ресурсам (CORS).

1.Создайте политику CORS, используя метод AddCors в Startup.ConfigureServices:

   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"));
        });

        ...
        ...
        ...
    }

2.Включить политику CORS, используя UseCors в Startup.Configure:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // Enable Cors
    app.UseCors("MyPolicy");
    ...
    ...
    ...
}

Я настоятельно рекомендую вам понять CORS, а также обратиться к Включить перекрестные запросы (CORS) в ASP.NET Core

...