2017-12-27 4 views
2

Mit .net Core 2.0, MVC, C#Überprüfen Sie, ob Benutzer gehört zu einem Kern .net AD-Gruppe

Ich habe eine app, wo auf der Login Ich möchte überprüfen, ob der Benutzer ein Teil einer bestimmten AD-Gruppe ist oder nicht. Wenn ja, fahren Sie mit der Anwendung fort, wenn nicht, dann zeigen Sie einen Fehler an. "Ich habe die ldap-Verbindungsadresse für den AD.

Ich bin nicht sicher, wie können wir das tun. NET-Kern, da es keine Beispiele dafür gibt.

Würde Eingaben schätzen.

Danke,

+0

wie mit dem Autorisieren Attribut Versuchen Sie so '[autorisieren (Role = "ADGroupName") ] ', stellen Sie sicher, dass die Windows-Authentifizierung aktiviert ist. Wenn das funktioniert, bin ich ziemlich sicher, dass Sie 'User.IsInRole (" ADGroupName ")' verwenden können, Sie müssen von dort aus sehen und arbeiten. –

Antwort

1

ich ein ähnliches Problem hat und es gelöst durch eine Middleware.

  1. ich hinzugefügt appsettings.json Linie mit Benutzern und Gruppen für die Authentifizierung (oder welche davon werden autorisiert), Beispiel:

    { 
        "AuthenticationGroupsAndUsers": "domain\\group,domain\\username", 
        "Logging": { 
         "LogLevel": { 
          "Default": "Warning" 
         } 
        } 
    } 
    
  2. eine neue Klasse hinzufügen, die die Konfiguration lesen und Check ist der aktuelle Benutzer zu den autorisierten Gruppen gehören/users

    public class AdAuthorizationMiddleware 
    { 
    
        private readonly string _groupsAndUsersConfigField = "AuthenticationGroupsAndUsers"; 
        private readonly List<string> _authorizedGroupAndUsers; 
        private IConfigurationRoot _configuration { get; } 
    
        private readonly RequestDelegate _next; 
    
        public AdAuthorizationMiddleware(RequestDelegate next) 
        { 
         // Read and save app settings 
         _configuration = GetConfiguration(); 
         _authorizedGroupAndUsers = _configuration[_groupsAndUsersConfigField].Split(',').ToList(); 
    
         _next = next; 
        } 
    
        public async Task Invoke(HttpContext context) 
        { 
         // Check does user belong to an authorized group or not 
         var isAuthorized = _authorizedGroupAndUsers.Any(i => context.User.IsInRole(i)); 
         // Return error if the current user is not authorized 
         if (!isAuthorized){ 
          context.Response.StatusCode = 403; 
          return; 
         } 
         // Jump to a next middleware is user is authorized 
         await _next.Invoke(context); 
        } 
    
        private static IConfigurationRoot GetConfiguration() 
        { 
         var builder = new ConfigurationBuilder() 
          .SetBasePath(Directory.GetCurrentDirectory()) 
          .AddJsonFile("appsettings.json"); 
    
         Console.WriteLine("Configuration is loaded"); 
         return builder.Build(); 
        } 
    } 
    
  3. eine Erweiterung Klasse für diese Middleware hinzufügen

    public static class AdAuthorizationMiddlewareExtension 
    { 
        public static IApplicationBuilder UseAdAuthorizationMiddleware(
         this IApplicationBuilder builder) 
        { 
         return builder.UseMiddleware<AdAuthorizationMiddleware>(); 
        } 
    } 
    
  4. Rufen Sie diese statische Methode der Erweiterungsklasse in Startup.cs -> Configure-Methode:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
        // ... 
        //some code 
    
        app.UseAuthentication(); 
        app.UseAdAuthorizationMiddleware(); 
    
        // some routing 
        // ... 
    } 
    
+0

Vielen Dank für die Idee. :) –

Verwandte Themen