这可能是一个奇怪的情况,请随时告诉我是否有更好的一般方法。
所以我有一个带有负载均衡器的应用程序。负载平衡器仅接受HTTP流量。到目前为止一切顺利。
然后,负载均衡器将其作为HTTP发送到我的asp.netcore。
这意味着什么:
尽管可以通过Https访问该网站,但是asp.netcore应用程序对此一无所知。
我仅在开发环境中将其指定为HTTPs,因为我的cookie仅在HTTPS中
但这给了我这个问题:
混合内容:“ pagePath”上的页面是通过HTTPS加载的,但是 请求了不安全的清单“ path / site.webmanifest”。这个请求 已被阻止;内容必须通过HTTPS提供。
这是我的创业公司
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
}
else
{
app.UseHsts();
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseExceptionHandler("/error/500");
app.UseMiddleware<WebRequestLoggerMiddleWare>();
app.UseMiddleware<UserTimeZoneMiddleWare>();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
我的cookie策略仍然在statup.cs中
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = new PathString("/account/login/");
options.AccessDeniedPath = new PathString("/account/forbidden/");
options.SlidingExpiration = true;
options.ExpireTimeSpan = TimeSpan.FromHours(cookieSettings.CookieExpirationInHours);
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.HttpOnly = true;
});
确保通过HTTPS请求webmanifest的最佳方法是什么?
我是否应该强制整个网站为HTTPS,并将来自LB的流量路由为https?那是一种方法,但是没有必要...
答案 0 :(得分:1)
反向代理与ASP.NET Core应用程序之间的通信不必通过https加密,但是必须满足两个条件,因此ASP.NET Core应用程序知道原始HTTP请求是否来自https。或http。
X-Forwarded-For
,协议的默认标头为X-Forwarded-Proto
可以在Configure ASP.NET Core to work with proxy servers and load balancers下阅读文档。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseForwardedHeaders(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); // In ASP.NET Core 1.x, replace the following line with: app.UseIdentity(); app.UseAuthentication(); app.UseMvc(); }
如果代理命名的标题与X-Forwarded-For
,X-Forwarded-Proto
和X-Forwarded-Host
不同,则可以使用ForwardedForHeaderName
,ForwardedProtoHeaderName
和ForwardedHostHeaderName
属性在ForwardedHeadersOptions
上进行更改。
此外,您的Startup
类应该看起来像这样
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
// redirect to Https
app.UseHttpsRedirection();
根据官方示例,并确保用户在首次访问时重定向到http,HSTS应该处理连续的请求