From 7e44b56ec4112f5e131c7fb96838b18550a62c85 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 21 Nov 2022 11:08:48 +0800 Subject: Fix #1354 #1355 . --- BackEnd/Timeline/Startup.cs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'BackEnd/Timeline/Startup.cs') diff --git a/BackEnd/Timeline/Startup.cs b/BackEnd/Timeline/Startup.cs index 3f94f8a9..fa4968d7 100644 --- a/BackEnd/Timeline/Startup.cs +++ b/BackEnd/Timeline/Startup.cs @@ -33,6 +33,8 @@ namespace Timeline { public class Startup { + private readonly bool _enableForwardedHeaders; + private readonly string? _forwardedHeadersAllowedProxyHosts; private readonly FrontEndMode _frontEndMode; public Startup(IConfiguration configuration, IWebHostEnvironment environment) @@ -51,9 +53,12 @@ namespace Timeline if (!Enum.TryParse(frontEndModeString, true, out _frontEndMode)) { _frontEndMode = FrontEndMode.Normal; - Console.WriteLine("Unknown FrontEnd configuaration value '{0}', fallback to normal.", frontEndModeString); + Console.WriteLine("Unknown FrontEnd configuration value '{0}', fallback to normal.", frontEndModeString); } } + + _enableForwardedHeaders = ApplicationConfiguration.GetBoolConfig(configuration, ApplicationConfiguration.EnableForwardedHeadersKey, false); + _forwardedHeadersAllowedProxyHosts = Configuration.GetValue(ApplicationConfiguration.ForwardedHeadersAllowedProxyHostsKey); } public IWebHostEnvironment Environment { get; } @@ -135,6 +140,28 @@ namespace Timeline config.RootPath = "ClientApp"; }); } + + if (_enableForwardedHeaders) + { + services.Configure(options => + { + options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto; + if (_forwardedHeadersAllowedProxyHosts is not null) + { + options.KnownNetworks.Clear(); + options.KnownProxies.Clear(); + foreach (var host in _forwardedHeadersAllowedProxyHosts.Split(new char[] { ';', ',' })) + { + // Resolve host to ip + var ips = System.Net.Dns.GetHostAddresses(host); + foreach (var ip in ips) + { + options.KnownProxies.Add(ip); + } + } + } + }); + } } @@ -151,6 +178,11 @@ namespace Timeline }); } + if (_enableForwardedHeaders) + { + app.UseForwardedHeaders(); + } + app.UseOpenApi(); app.UseReDoc(); -- cgit v1.2.3