0

我刚刚将我的代码移动到使用 https 的 QA 环境中,而在 Dev 中工作的内容在 QA 中不起作用,因为浏览器陷入无限重定向循环。我们的负载均衡器强制使用 https,因此当登录重定向发生在代码中时,由于某种原因它试图重定向到 http 而不是 https,负载均衡器会停止它并再次添加 https,这会导致无限循环。我的问题是为什么这段代码不只是重定向到 https,路径在ConfigureServices()方法中是相对的。我在 fiddler 中查看过它,它确实为使用 http 而不是 https 的重定向添加了 FQDN。

我需要在此处添加一些属性以允许 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();
    }

谢谢。

4

3 回答 3

1

我们只使用:

 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 的大多数情况下都有帮助

于 2018-06-13T10:58:41.963 回答
0

根据@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,是的,但它也在重定向 URL 前面添加了 IP 地址(我们有一个 netscaler磅)。显然,默认情况下,当您添加自定义标头时,有一个复选框可以将 IP 包含到内部节点,并且必须取消选中。完成之后,我们就开始营业了。

再次感谢@Programmer 的帮助。你肯定给我指出了正确的方向。

于 2018-06-13T20:51:32.460 回答
0

对于 .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));
于 2019-03-13T19:03:33.270 回答