Доступ к Active Directory от ASP.NET MVC, использующий C#

Я должен получить доступ к Active Directory для получения информации о группах, которым принадлежат клиенты. Проект, который я имею, является приложением MVC ASP.NET с помощью C#. Я никогда не программировал против Active Directory прежде и нуждаюсь в некотором совете относительно того, какой лучший способ начать, какая модель обеспечения безопасности использовать для доступа к информации, и возможно указывают на меня на некоторые хорошие учебные руководства.

24
задан Russ Clark 2 June 2010 в 12:14
поделиться

3 ответа

Поскольку вы используете MVC, у вас есть доступ к новому Пространство имен System.DirectoryServices.AccountManagement в .NET 3.5. Эти классы должны быть предпочтительнее старых классов в самом DirectoryServices, поскольку они намного проще в использовании. Есть пара ошибок, которые не были решены в версии 3.5 (например, ограничение в 1500 членов при запросе групп), но я уверен, что они были исправлены в .NET 4.0. Для большинства задач новые классы работают очень хорошо.

 using (var context = new PrincipalContext( ContextType.Domain )) 
 {
      using (var user = UserPrincipal.FindByIdentity( context, "username" ))
      {
          var groups = user.GetAuthorizationGroups();
          ...
      }
 }
47
ответ дан 28 November 2019 в 22:47
поделиться

Используйте пространство имен System.DirectoryServices для доступа к AD.

Два наиболее важных класса:

  1. DirectoryEntry ;
  2. DirectorySearcher .

Предположим, что ваш домен: MyIntranet.MyCompany.com

Затем вам нужно будет создать корневой экземпляр класса DirectoryEntry :

DirectoryEntry root = new DirectoryEntry("LDAP://DC=MyIntranet,DC=MyCompany,DC=com");

При поиске в AD для конкретное событие группы или пользователя:

DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = root;
searcher.SearchScope = SearchScope.Subtree;

Допустим, вы хотите найти имя пользователя с именем: AnyUser1 , DirectorySearcher.Filter должен выглядеть так:

searcher.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})", "AnyUser1");

Затем получите результат через SearchResult следующим образом:

bool userFound = false;
SearchResult foundUser = null;

try {
    foundUser = searcher.FindOne(); // You might as well use the FindAll() method if you expect more then one result.
    userFound = foundUser != null;
} catch(Exception) {
    throw;
}

if (!userFound)
    return;

DirectoryEntry user = foundUser.GetDirectoryEntry();

Затем вы можете получить группы, членом которых является этот пользователь, например, через свойство memberOf :

user.Properties("memberOf").Value

Хороший обзор см. В этом CodeProject статья: Как (почти) все в Active Directory .

И список свойств: Сопоставление между свойствами IADsUser и атрибутами Active Directory .

РЕДАКТИРОВАТЬ №1

Если вы используете олицетворение, вы могли бы подумать о настройке некоторых параметров для своего приложения, таких как DefaultRootDomain , DefaultUserName и DefaultPassword ], а затем используйте их при создании экземпляра корневого каталога DirectoroEntry .

public static class AdHelper {

    public static string DefaultRootDse {
        get {
            return Properties.Settings.Default.DefaultRootDomain;
        }
    }

    private static string DefaultUserName {
        get {
            return Properties.Settings.Default.DefaultUserName;
        }
    }

    private static string DefaultPassword {
        get {
            return Properties.Settings.Default.DefaultPassword;
        }
    } 

    public static DirectoryEntry RootDse {
        get {
            if (_rootDse == null)
                _rootDse = new DirectoryEntry(DefaultRootDse, DefaultUserName, DefaultPassword);
            return _rootDse;
        }
    }
    private static DirectoryEntry _rootDse;
}
13
ответ дан 28 November 2019 в 22:47
поделиться

Если у вас .NET 3.5 или вы можете обновить его до него - обязательно используйте новую функцию в System.DirectoryServices.AccountManagement !

См. Отличную вводную статью Управление принципами безопасности каталогов в .NET Framework 3.5 в журнале MSDN Magazine для получения дополнительной информации и быстрого старта.

0
ответ дан 28 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: