私は、ロードバランサの背後で動作し、httpsを強制する.netコア1.1アプリケーションを取得するよう努めています。私は私のStartup.cs.netコアX転送されたプロトが動作しない
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, IOptions<Auth0Settings> auth0Settings)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
var startupLogger = loggerFactory.CreateLogger<Startup>();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
startupLogger.LogInformation("In Development");
}
else
{
startupLogger.LogInformation("NOT in development");
app.UseExceptionHandler("/Home/Error");
}
app.UseMiddleware<HttpsRedirectMiddleware>();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});`
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme= CookieAuthenticationDefaults.AuthenticationScheme,
AutomaticAuthenticate = true,
AutomaticChallenge = true,
CookieHttpOnly = true,
SlidingExpiration = true
});
にHttpsRedirectMiddlewareはLBがX-転送さ-プロトセットを持って、それがない、そして唯一の値としてHTTPSとして戻ってくる検証するためである次のセットアップを持っています。私がサイト(https://myapp.somedomain.net)に行くと、私は認証されていないことを知り、私を(http://myapp.somedomain.net/Account/Logon?ReturnUrl=%2f)にリダイレクトします。それはSSL接続を失い、私のポート80に戻りました。 .netコアのドキュメントでは、以下のような "UseForwardedHeaders"を使用すると言われていますが、私の場合は動作しません。この切り替えが発生した場合、コンソールロガーにはミドルウェアからのエラーや警告はありません。短期の修正については
、私は完璧に動作しますが、ハックである上記
app.Use(async (context, next) =>
{
var xproto = context.Request.Headers["X-Forwarded-Proto"].ToString();
if (xproto!=null && xproto.StartsWith("https", StringComparison.OrdinalIgnoreCase)){
startupLogger.LogInformation("Switched to https");
context.Request.Scheme = "https";
}
await next();
});
「UseForwardedHeaders」の下にこれを入れています。私は正しい方法でそれをしたいと思います。
が、これはトリックをしたAppHarbor上でSSLを実行しているサンプルアプリケーションを取得しようとしている日の机のに対して私の頭を叩きました。ロードバランサの背後にあるネットワークをチェックして、アプリケーションが起動するときにそれを既知のネットワークとして使用する方法があるとは思いますが、少なくとも私はそれが動作する可能性があることを知っています。ありがとう! –
ネットワークをクリアすると、ポート80を介して接続し、xforwardedヘッダーを使用している人がいることをアプリケーションに知らせるので、暗号化されておらず、MiTM攻撃を強制することができます。あなたのファイアウォールがhttps(433)トラフィックだけを許可するように設定されている場合は、正常に動作するはずです。ソフトウェアはデフォルト設定のアタックを防ぐために、すぐにセキュアにする必要があります。したがって、.netコアの127.0.0.1がデフォルトです。 – Josh