39 lines
1.6 KiB
C#
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;
|
|
}
|
|
} |