Проверка подлинности файлов cookie .net core 2.0 застревает в бесконечном цикле перенаправления при попытке доступа через https - PullRequest
0 голосов
/ 12 июня 2018

Я только что переместил свой код в нашу среду QA, которая использует https, и то, что работало в Dev, не работает в QA, потому что браузер застрял в бесконечном цикле перенаправления.Наш балансировщик нагрузки вызывает https, поэтому, когда происходит перенаправление входа в систему из кода, который по какой-то причине пытается перенаправить на http вместо https, балансировщик нагрузки останавливает его и снова добавляет https, что вызывает бесконечный цикл.У меня вопрос, почему этот код не просто перенаправляет на https, а путь является относительным в методе ConfigureServices().Я посмотрел на него в Fiddler, и он действительно добавляет полное доменное имя для перенаправления с http вместо https.

Есть ли здесь какое-то свойство, которое мне нужно добавить к параметрам, чтобы разрешить перенаправления https?

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/LogIn";
                options.LogoutPath = "/Account/LogOff";
            });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseAuthentication();
    }

спасибо.

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Основываясь на предложении @ Programmer в комментариях к OP, я взглянул на это: https://codeopinion.com/configuring-asp-net-core-behind-a-load-balancer/ Он точно описывает мою ситуацию (завершение ssl на балансировщике нагрузки и приложение .net core 2.0, перенаправляющее на httpдля входа).Затем я попытался сделать запрос через LB с заголовком, предложенным в статье, и добавил в метод Configure() класса Startup этот фрагмент кода:

app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedProto });

чтоИнтересно, что когда я сделал запрос, включающий заголовок proto:

X-Forwarded-Proto:https

извне LB, он передал этот заголовок в приложение, и он работал отлично, не более бесконечноцикл перенаправления.Однако, когда наши ребята из инфраструктуры добавили этот заголовок к запросу, который LB отправляет внутренним узлам за LB, я получил перенаправление на https, да, но оно также добавляло IP-адрес к URL-адресу перенаправления (у нас есть netscalerФУНТ).По-видимому, по умолчанию, когда вы добавляете пользовательский заголовок, есть флажок для включения IP-адреса во внутренний узел, который должен быть снят.После того, как это будет сделано, мы в деле.

Еще раз спасибо @Programmer за вашу помощь.Вы определенно указали мне в правильном направлении.

0 голосов
/ 13 марта 2019

Для .net core 2.1 и выше с аутентификацией Azure попробуйте этот код.

 services.Configure(AzureADDefaults.CookieScheme, options =>
    {
    options.Cookie.SameSite = SameSiteMode.None;
    });

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
             .AddAzureAD(options => Configuration.Bind("AzureAd", options));
0 голосов
/ 13 июня 2018

Мы просто используем:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {           
        ... //settings and logging initialization
        app.Use((context, next) =>
        {
            context.Request.Scheme = "https";
            return next();
        });
        ... //all the rest middleware calls
    }

, и это помогает в большинстве ситуаций под OWIN и .Net Core до 2.0

...