首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.net核心2.0 cookie身份验证在尝试通过https访问时陷入无限重定向循环

.net核心2.0 cookie身份验证在尝试通过https访问时陷入无限重定向循环
EN

Stack Overflow用户
提问于 2018-06-12 23:07:00
回答 3查看 2.5K关注 0票数 0

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

是否需要向此处的选项添加某些属性以允许https重定向?

代码语言:javascript
复制
    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();
    }

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-13 18:58:42

我们只需使用:

代码语言:javascript
复制
 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核心高达2.0的大多数情况下,它都会有所帮助

票数 1
EN

Stack Overflow用户

发布于 2018-06-14 04:51:32

基于@Programmer在对OP的评论中的建议,我看了一下:https://codeopinion.com/configuring-asp-net-core-behind-a-load-balancer/它准确地描述了我的情况(负载均衡器处的ssl终止和.net核心2.0应用程序重定向到http进行登录)。然后,我尝试使用文章建议的头通过LB发出请求,并在Startup类的Configure()方法中添加以下代码:

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

有趣的是,当我发出一个包含proto头的请求时:

X-Forwarded-Proto:https

在LB之外,它将这个头传递给应用程序,它工作得很好,没有无限的重定向循环。然而,当我们的基础设施人员将这个头添加到LB向LB后面的内部节点发出的请求时,我得到了一个到https的重定向,但它也将ip地址前缀到重定向URL (我们有一个netscaler LB)。显然,在默认情况下,当您添加自定义标头时,会有一个复选框来包含内部节点的IP,但必须取消选中该复选框。在那之后,我们就可以开始做生意了。

再次感谢@Programmer的帮助。你绝对给我指明了正确的方向。

票数 0
EN

Stack Overflow用户

发布于 2019-03-14 03:03:33

对于具有azure身份验证的.net核心2.1和更高版本,请尝试此代码。

代码语言:javascript
复制
 services.Configure(AzureADDefaults.CookieScheme, options =>
    {
    options.Cookie.SameSite = SameSiteMode.None;
    });

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
             .AddAzureAD(options => Configuration.Bind("AzureAd", options));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50820414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档