尝试通过https

时间:2018-06-12 15:07:00

标签: c# authentication asp.net-core-2.0 startup cookie-authentication

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

我们只是使用:

<record id="view_order_form_inherit" model="ir.ui.view">
    <field name="name">sale.order.form</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="arch" type="xml">
        <xpath expr="//sheet/group/group/field[@name='payment_term_id']" position="attributes">
            <attribute name="options" />
        </xpath>
    </field>
</record>

并且它在OWIN和.Net Core下的大多数情况下都有帮助,最高可达2.0

答案 1 :(得分:0)

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

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

有趣的是,当我提出包括原型标题的请求时:

X-Forwarded-Proto:https

从LB外部,它通过该标头传递到应用程序,它工作得很好,没有更多的无限重定向循环。然而,当我们的基础设施人员将这个标题添加到LB对LB后面的内部节点的请求时,我得到了重定向到https,但是它还将ip地址添加到重定向URL(我们有一个netscaler磅)。显然,默认情况下,当您添加自定义标头时,会有一个复选框,用于将IP包含在内部节点中,并且必须取消选中。在那之后,我们开始营业。

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

答案 2 :(得分: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));