обеспечить выполнение запроса https на веб-сайте, отличном от https - ошибка смешанного содержимого в chrome - PullRequest
0 голосов
/ 30 ноября 2018

Это может быть странным случаем, и не стесняйтесь, дайте мне знать, если есть лучший способ в целом.

Итак, у меня есть приложение с балансировщиком нагрузки.Балансировщик нагрузки принимает в HTTP только трафик.Пока все хорошо.

Затем балансировщик нагрузки отправляет его как HTTP на мой asp.netcore.

Что это означает:

  • Хотя доступна веб-сайт в Https, приложение asp.netcore не знает об этом.

  • Я указываю его только как HTTPs в среде разработки, так как мои куки-файлы только в HTTPS

Но это вызывает у меня эту проблему:

Смешанный контент: страница в 'pagePath' была загружена через HTTPS, но запросил незащищенный манифест 'путь / сайт.webmanifest.Этот запрос был заблокирован;содержимое должно быть передано по протоколу HTTPS.

Вот мой запуск

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseHttpsRedirection();
    }
    else
    {
        app.UseHsts();
    }

    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseAuthentication();

    app.UseExceptionHandler("/error/500");
    app.UseMiddleware<WebRequestLoggerMiddleWare>();
    app.UseMiddleware<UserTimeZoneMiddleWare>();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

И моя политика использования файлов cookie, все еще в statup.cs

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = new PathString("/account/login/");
        options.AccessDeniedPath = new PathString("/account/forbidden/");
        options.SlidingExpiration = true;
        options.ExpireTimeSpan = TimeSpan.FromHours(cookieSettings.CookieExpirationInHours);
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
        options.Cookie.HttpOnly = true;

    });

Чтобыло бы лучшим способом убедиться, что веб-манифест запрашивается через HTTPS?

Должен ли я просто заставить весь веб-сайт быть HTTPS и маршрутизировать трафик с LB как https?Это один из способов, но в этом не должно быть необходимости ...

1 Ответ

0 голосов
/ 30 ноября 2018

Трафик между вашим обратным прокси-сервером и вашим приложением ASP.NET Core не нужно шифровать по протоколу https, но необходимо выполнить два условия, чтобы ваше приложение ASP.NET Core знало, был ли исходный запрос HTTP передан по протоколу https.или http.

  1. Ваш обратный прокси-сервер должен отправлять правильные заголовки с исходным протоколом и IP-адресом исходного хоста.Заголовками по умолчанию для этого являются X-Forwarded-For для удаленного IP-адреса и X-Forwarded-Proto для протокола
  2. Промежуточное программное обеспечение перенаправленных заголовков устанавливается по умолчанию при работе в IIS и (согласно документам) должно быть включенодля других сценариев хостинга.

Документация может быть прочитана под Настройка ASP.NET Core для работы с прокси-серверами и балансировщиками нагрузки .

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = 
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseForwardedHeaders();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();
    // In ASP.NET Core 1.x, replace the following line with: app.UseIdentity();
    app.UseAuthentication();
    app.UseMvc();
}

Если заголовки прокси-серверов отличаются от X-Forwarded-For, X-Forwarded-Proto и X-Forwarded-Host, вы можете использовать свойства ForwardedForHeaderName, ForwardedProtoHeaderName и ForwardedHostHeaderNameна ForwardedHeadersOptions, чтобы изменить его.

Кроме того, ваш Startup класс должен выглядеть следующим образом

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    // redirect to Https
    app.UseHttpsRedirection();

в соответствии с официальными примерами и для обеспечения перенаправления пользователя на http при его / ее первом посещении, HSTS должен обрабатывать последовательные запросы

...