Files
monorepo/LCU.Library.Internal.Security/LCU.Library.Internal.Security/AzureAdGroupPolicyServiceCollectionExtension.cs
T
2026-03-24 09:49:29 -05:00

39 lines
1.6 KiB
C#

using System.Linq;
using LCU.Library.Internal.Security.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Web;
namespace LCU.Library.Internal.Security;
public static class AzureAdGroupPolicyServiceCollectionExtension
{
private const string DefaultScheme = "OpenIdConnect";
public static IServiceCollection AddAzureAdGroupPolicyServices(this IServiceCollection services,
IConfigurationSection azureAdConfiguration,
IConfigurationSection securityConfiguration,
string defaultScheme = DefaultScheme)
{
services.AddAuthentication(defaultScheme)
.AddMicrosoftIdentityWebApp(azureAdConfiguration);
// Azure AD groups policies
var security = AccessPolicyFactory.BuildPoliciesFromConfiguration(securityConfiguration);
services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
foreach (var (name, policy) in security.Policies.SelectMany(p => AccessPolicyFactory.HandlePoliciesFromConfiguration(p)))
{
options.AddPolicy(name, policy);
}
});
services.AddScoped<IAzureAdAuthorizationService, AzureAdAuthorizationService>();
services.AddSingleton<IAuthorizationHandler, GroupMembershipRequirementHandler>();
return services;
}
}