| | | 1 | | namespace ProjectTemplate.Web.Options; |
| | | 2 | | |
| | | 3 | | /// <summary> |
| | | 4 | | /// Configuration settings for forwarded headers support. |
| | | 5 | | /// </summary> |
| | | 6 | | public sealed class ApplicationForwardedHeadersOptions |
| | | 7 | | { |
| | | 8 | | /// <summary> |
| | | 9 | | /// Configuration section name for forwarded headers settings. |
| | | 10 | | /// </summary> |
| | | 11 | | public const string SectionName = "ProjectTemplate:ForwardedHeaders"; |
| | | 12 | | |
| | | 13 | | /// <summary> |
| | | 14 | | /// Enables or disables forwarded headers middleware. |
| | | 15 | | /// </summary> |
| | 1112 | 16 | | public bool Enabled { get; set; } = true; |
| | | 17 | | |
| | | 18 | | /// <summary> |
| | | 19 | | /// Forwarded header values to process. |
| | | 20 | | /// Valid values include XForwardedFor, XForwardedProto, XForwardedHost, and XForwardedPrefix. |
| | | 21 | | /// </summary> |
| | 1540 | 22 | | public string[] Headers { get; set; } = |
| | 418 | 23 | | [ |
| | 418 | 24 | | "XForwardedFor", |
| | 418 | 25 | | "XForwardedProto" |
| | 418 | 26 | | ]; |
| | | 27 | | |
| | | 28 | | /// <summary> |
| | | 29 | | /// Limits the number of forwarded header entries processed. |
| | | 30 | | /// Keep this low unless the proxy chain is well understood. |
| | | 31 | | /// </summary> |
| | 1256 | 32 | | public int? ForwardLimit { get; set; } = 1; |
| | | 33 | | |
| | | 34 | | /// <summary> |
| | | 35 | | /// Requires the number of values to match across forwarded headers. |
| | | 36 | | /// </summary> |
| | 556 | 37 | | public bool RequireHeaderSymmetry { get; set; } |
| | | 38 | | |
| | | 39 | | /// <summary> |
| | | 40 | | /// Clears default known proxies/networks before applying configured values. |
| | | 41 | | /// For production, set this to true and explicitly configure trusted proxies/networks. |
| | | 42 | | /// </summary> |
| | 556 | 43 | | public bool ClearKnownNetworksAndProxies { get; set; } |
| | | 44 | | |
| | | 45 | | /// <summary> |
| | | 46 | | /// Exact proxy IP addresses trusted to send forwarded headers. |
| | | 47 | | /// </summary> |
| | 1674 | 48 | | public string[] KnownProxies { get; set; } = []; |
| | | 49 | | |
| | | 50 | | /// <summary> |
| | | 51 | | /// Trusted proxy networks in CIDR notation. |
| | | 52 | | /// Example: 10.0.0.0/24 |
| | | 53 | | /// </summary> |
| | 1674 | 54 | | public string[] KnownNetworks { get; set; } = []; |
| | | 55 | | |
| | | 56 | | /// <summary> |
| | | 57 | | /// Allowed host values from X-Forwarded-Host. |
| | | 58 | | /// Only needed when XForwardedHost is enabled. |
| | | 59 | | /// </summary> |
| | 1398 | 60 | | public string[] AllowedHosts { get; set; } = []; |
| | | 61 | | } |