using System.Collections.Generic; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.HttpOverrides; using Microsoft.Extensions.DependencyInjection; using xIdentityHelper; using xCommons.Authorization; using xCommons.Extensions; namespace xApi.Extensions { public static class XStartupExtensions { /// /// Register Authorization Policies /// /// /// public static void AddXAuthorization ( this IServiceCollection services, IDictionary policies = null ) { // services.AddAuthorization (options => { // if (!policies.IsNull ()) { // // Fill Policies ... using (var policiesEnumerator = policies.GetEnumerator ()) { while (policiesEnumerator.MoveNext ()) { var policyDescriptor = policiesEnumerator.Current; options.AddPolicy (policyDescriptor.Key, policyDescriptor.Value); } } } // var xPolicies = XAuthorizationHelper.GetXAuthorizationPolicies (); if (!xPolicies.IsNull ()) { // // Fill Policies ... using (var policiesEnumerator = xPolicies.GetEnumerator ()) { while (policiesEnumerator.MoveNext ()) { var policyDescriptor = policiesEnumerator.Current; options.AddPolicy (policyDescriptor.Key, policyDescriptor.Value); } } } }); // services.AddSingleton (); } /// /// Use Forward Headers Options for resolving behind a proxy issues ... /// /// /// public static void UseXForwardOptions (this IApplicationBuilder source) { // var forwardOptions = new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto, RequireHeaderSymmetry = false }; // forwardOptions.KnownNetworks.Clear (); forwardOptions.KnownProxies.Clear (); // // ref: https://github.com/aspnet/Docs/issues/2384 source.UseForwardedHeaders (forwardOptions); } } }