File tree Expand file tree Collapse file tree 2 files changed +50
-1
lines changed
test/Microsoft.AspNetCore.Tests Expand file tree Collapse file tree 2 files changed +50
-1
lines changed Original file line number Diff line number Diff line change @@ -24,7 +24,24 @@ public void Configure(ForwardedHeadersOptions options)
2424 return ;
2525 }
2626
27- options . ForwardedHeaders = ForwardedHeaders . XForwardedFor | ForwardedHeaders . XForwardedProto ;
27+ var forwardedHeaders = _configuration [ "ForwardedHeaders_Headers" ] ;
28+ if ( string . IsNullOrEmpty ( forwardedHeaders ) )
29+ {
30+ options . ForwardedHeaders = ForwardedHeaders . XForwardedFor | ForwardedHeaders . XForwardedProto ;
31+ }
32+ else
33+ {
34+ var headers = ForwardedHeaders . None ;
35+ foreach ( var headerName in forwardedHeaders . Split ( ',' , StringSplitOptions . RemoveEmptyEntries | StringSplitOptions . TrimEntries ) )
36+ {
37+ if ( Enum . TryParse < ForwardedHeaders > ( headerName , true , out var headerValue ) )
38+ {
39+ headers |= headerValue ;
40+ }
41+ }
42+ options . ForwardedHeaders = headers ;
43+ }
44+
2845 // Only loopback proxies are allowed by default. Clear that restriction because forwarders are
2946 // being enabled by explicit configuration.
3047 options . KnownNetworks . Clear ( ) ;
Original file line number Diff line number Diff line change @@ -83,6 +83,38 @@ public async Task WebHostConfiguration_EnablesForwardedHeadersFromConfig()
8383 result . EnsureSuccessStatusCode ( ) ;
8484 }
8585
86+ [ Fact ]
87+ public async Task WebHostConfiguration_EnablesForwardedHeaders_CustomHeaders_FromConfig ( )
88+ {
89+ using var host = WebHost . CreateDefaultBuilder ( )
90+ . ConfigureAppConfiguration ( configBuilder =>
91+ {
92+ configBuilder . AddInMemoryCollection ( new [ ]
93+ {
94+ new KeyValuePair < string , string > ( "FORWARDEDHEADERS_ENABLED" , "true" ) ,
95+ new KeyValuePair < string , string > ( "FORWARDEDHEADERS_HEADERS" , "All" ) ,
96+ } ) ;
97+ } )
98+ . UseTestServer ( )
99+ . Configure ( app =>
100+ {
101+ Assert . True ( app . Properties . ContainsKey ( "ForwardedHeadersAdded" ) , "Forwarded Headers" ) ;
102+ app . Run ( context =>
103+ {
104+ Assert . Equal ( "https" , context . Request . Scheme ) ;
105+ Assert . Equal ( "/test" , context . Request . PathBase . Value ) ;
106+ return Task . CompletedTask ;
107+ } ) ;
108+ } ) . Build ( ) ;
109+
110+ await host . StartAsync ( ) ;
111+ var client = host . GetTestClient ( ) ;
112+ client . DefaultRequestHeaders . Add ( "x-forwarded-proto" , "https" ) ;
113+ client . DefaultRequestHeaders . Add ( "x-forwarded-prefix" , "/test" ) ;
114+ var result = await client . GetAsync ( "http://localhost/" ) ;
115+ result . EnsureSuccessStatusCode ( ) ;
116+ }
117+
86118 [ Fact ]
87119 public void CreateDefaultBuilder_RegistersRouting ( )
88120 {
You can’t perform that action at this time.
0 commit comments