From cab671193ede95fa4ee0a4767f67112c1fe6cbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szak=C3=A1ts=20Alp=C3=A1r=20Zsolt?= Date: Sat, 16 Aug 2025 22:24:47 +0200 Subject: [PATCH] Enhances request header logging. Adds detailed logging of request headers for debugging purposes. Clears known networks and proxies in forwarded headers options. This change improves the ability to diagnose issues related to request handling and forwarding in different environments. --- Source/ProofOfConcept/Program.cs | 41 ++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/Source/ProofOfConcept/Program.cs b/Source/ProofOfConcept/Program.cs index 6ef64ee..437d867 100644 --- a/Source/ProofOfConcept/Program.cs +++ b/Source/ProofOfConcept/Program.cs @@ -95,7 +95,10 @@ builder.Services.AddHostedService(); //Build app WebApplication app = builder.Build(); -app.UseForwardedHeaders(new ForwardedHeadersOptions() { ForwardedHeaders = ForwardedHeaders.All }); +ForwardedHeadersOptions forwardedHeadersOptions = new ForwardedHeadersOptions() { ForwardedHeaders = ForwardedHeaders.All }; +forwardedHeadersOptions.KnownNetworks.Clear(); +forwardedHeadersOptions.KnownProxies.Clear(); +app.UseForwardedHeaders(forwardedHeadersOptions); if (app.Environment.IsDevelopment()) { @@ -141,7 +144,41 @@ if (app.Environment.IsDevelopment()) var ctx = httpContextAccessor.HttpContext!; var request = ctx.Request; - return $"{request.Scheme}://{request.Host}/token-exchange"; + Dictionary headers = new Dictionary(); + headers.Add("Host", request.Host.Value ?? ""); + headers.Add("Scheme", request.Scheme); + headers.Add("Method", request.Method); + headers.Add("Path", request.Path.Value ?? ""); + headers.Add("QueryString", request.QueryString.Value ?? ""); + headers.Add("RemoteIpAddress", ctx.Connection.RemoteIpAddress?.ToString() ?? ""); + headers.Add("RemotePort", ctx.Connection.RemotePort.ToString()); + headers.Add("LocalIpAddress", ctx.Connection.LocalIpAddress?.ToString() ?? ""); + headers.Add("LocalPort", ctx.Connection.LocalPort.ToString()); + headers.Add("IsHttps", request.IsHttps.ToString()); + headers.Add("X-Forwarded-For", request.Headers["X-Forwarded-For"].ToString()); + headers.Add("X-Forwarded-Proto", request.Headers["X-Forwarded-Proto"].ToString()); + headers.Add("X-Forwarded-Host", request.Headers["X-Forwarded-Host"].ToString()); + headers.Add("X-Forwarded-Port", request.Headers["X-Forwarded-Port"].ToString()); + headers.Add("X-Forwarded-Prefix", request.Headers["X-Forwarded-Prefix"].ToString()); + headers.Add("X-Forwarded-Server", request.Headers["X-Forwarded-Server"].ToString()); + headers.Add("X-Forwarded-Path", request.Headers["X-Forwarded-Path"].ToString()); + headers.Add("X-Forwarded-PathBase", request.Headers["X-Forwarded-PathBase"].ToString()); + headers.Add("X-Forwarded-Query", request.Headers["X-Forwarded-Query"].ToString()); + headers.Add("X-Forwarded-Query-String", request.Headers["X-Forwarded-Query-String"].ToString()); + headers.Add("Connection", request.Headers["Connection"].ToString()); + headers.Add("Accept", request.Headers["Accept"].ToString()); + headers.Add("Accept-Encoding", request.Headers["Accept-Encoding"].ToString()); + headers.Add("Accept-Language", request.Headers["Accept-Language"].ToString()); + headers.Add("Cache-Control", request.Headers["Cache-Control"].ToString()); + headers.Add("Content-Length", request.Headers["Content-Length"].ToString()); + headers.Add("Content-Type", request.Headers["Content-Type"].ToString()); + headers.Add("Cookie", request.Headers["Cookie"].ToString()); + headers.Add("Pragma", request.Headers["Pragma"].ToString()); + headers.Add("Referer", request.Headers["Referer"].ToString()); + + String json = JsonSerializer.Serialize(headers, new JsonSerializerOptions() { WriteIndented = true }); + + return json; }); }