Начало работы с ActiveDirectory в C # - PullRequest
8 голосов
/ 30 января 2010

Я работаю над приложением .NET, написанным на C # и WPF. В этом приложении мы будем аутентифицировать пользователей на сервере Active Directory . В конце концов, мы можем захотеть поддерживать и другие реализации LDAP , поэтому, если я смогу построить это без привязки к ActiveDirectory, это будет преимуществом.

Какой лучший способ начать с этим? Есть ли хорошие ресурсы, которые я должен проверить? Я слышал, что в .NET есть библиотека для обработки связи с Active Directory - или есть общая библиотека LDAP? Любой совет приветствуется!

Примечание. Я использую .NET 3.5.

Ответы [ 5 ]

5 голосов
/ 30 января 2010

.NET 3.5 значительно упростил это, добавив пространство имен System.DirectoryServices.AccountManagement . Если вы не используете .NET 3.5, я бы пошел прямо в это пространство имен. Как обычно, В проекте кода есть , что показывает множество примеров использования .

Пример простоты, аутентификация пользователя:

var pc = new PrincipalContext(ContextType.Domain, "MyDomain", "DC=MyDomain,DC=com");
return pc.ValidateCredentials(username, pass);
4 голосов
/ 30 января 2010

Я бы по возможности избегал использования System.DirectoryServices.AccountManagement. Это, конечно, кажется, делает вещи проще, но у меня были многочисленные проблемы с ним (например, он иногда игнорировал указанный порт), и это действительно просто оболочка System.DirectoryServices. Хотя вам, возможно, повезет с другими каталогами LDAP, он определенно не предназначен для этого.

Я бы порекомендовал System.DirectoryServices.Protocols сборка. Начать с него немного сложнее, а также потребуется немного больше усилий, но вы обнаружите, что он гораздо более гибок с лучшей производительностью и гораздо более совместим со стандартами. Я имел большой успех, используя его против ряда различных каталогов, включая AD.

В MSDN есть фантастическая вводная статья , которая будет охватывать большинство сценариев, которые вам могут понадобиться.

2 голосов
/ 30 января 2010

Если вы используете .NET 3.5, обязательно проверьте пространство имен System.DirectoryServices.AccountManagement - все стало намного проще, чем раньше!

Также ознакомьтесь с этой статьей MSDN Управление принципами безопасности каталогов в .NET Framework 3.5 по этой теме - настоятельно рекомендуется!

Если вам нужно оставаться «универсальным» и поддерживать другие каталоги LDAP, вы также можете взглянуть на Введение в System.DirectoryServices.Protocol , которое является сборкой и пространством имен Microsoft .NET, в которой рассматриваются с низкоуровневыми вызовами LDAP и должен работать с любым каталогом, совместимым с LDAP (Sun, Novell и т. д.)

1 голос
/ 30 января 2010

Вам нужно будет пойти с System.DirectoryServices сборкой. Вот несколько примеров: Запрос Active Directory с использованием классов .NET и запросов LDAP

0 голосов
/ 12 сентября 2013

Вы можете сослаться на мой проект OSS, основанный на шаблоне ActiveRecord, следующим образом (так как это открытый источник, вы можете узнать, как работать с AD с DirectoryEntry, DirectoryEntry поддерживает не только протокол LDAP, но также IIS, WIN и т. Д. поэтому я разрабатываю эту библиотеку):

using (var userObject = UserObject.FindOneByCN(this.ADOperator, “pangxiaoliang”))
{
     if(userObject.Email == "example@landpy.com")
     {
          userObject.Email = "mv@live.cn";
          userObject.Save();
     }
}

https://landpyactivedirectory.codeplex.com/documentation

И вам будет легко управлять AD, если вы не заинтересованы в нем, пожалуйста, проигнорируйте мой ответ. Любой вопрос о AD, пожалуйста, свяжитесь со мной:)

...