我刚刚将我的代码移到了使用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();
}
感谢。
答案 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));