Bezdepbonusu7Программирование: статьи и ответы

Вопрос

С# доступ к активному каталогу с разными учетными данными пользователя

Автор вопроса: CommunityОтветов: 4

Существует новое приложение для создания пользователей, которое мы только что предоставили нашим пользователям. Однако этим пользователям нужна возможность создавать пользователей через приложение, даже если у них самих нет разрешения на создание пользователей.

В С#, как вы выдаете себя за другого пользователя, чтобы иметь эту функциональность. Это основное приложение, использующее System.DirectoryServices.

Фрагмент кода:

DirectoryEntry dEntry = new DirectoryEntry("LDAP://OU=");
DirectorySearcher dSearcher = new DirectorySearcher(dEntry);
//filter just user objects
dSearcher.SearchScope = SearchScope.Subtree;
dSearcher.Filter = "(&(objectClass=user)(mail=" + excel_Holding_Table.Rows[i]["EmailAddress"].ToString() + "))";
dSearcher.PageSize = 1000;
sResults = dSearcher.FindAll();
  • Запускать процесс/службу от имени администратора? Я знаю, как это сделать вручную, но не знаю, как это будет работать в .NET в автоматическом режиме. JAB 24.05.2012

active-directorydirectoryservices

Ответы

Ответ 1 · рейтинг 10 · Darren

Вы можете напрямую использовать класс DirectoryEntry и указать имя пользователя и пароль:

DirectoryEntry de = new DirectoryEntry(path);

de.Username = "username";
de.Password = "password";

И получить доступ к Active Directory из объекта de. Или вы можете использовать класс WindowsIdentity и олицетворять пользователя:

WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle());
WindowsImpersonationContext impersonatedUser = newId.Impersonate();

Полный образец кода доступен по адресу:

Олицетворение и DirectoryEntry

Ответ 2 · Joe

Используйте конструктор DirectoryEntry, который принимает параметры имени пользователя, пароля и authenticationType.

Кроме того, типы DirectoryEntry DirectorySearcher и SearchResultCollection являются IDisposable - вам нужно их удалить, возможно, с помощью операторов using.

Ответ 3 · danielQ

Используйте конструктор DirectoryEntry (String, String, String, AuthenticationTypes), который принимает имя пользователя и пароль вместо олицетворения.

DirectoryEntry directoryEntry = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/Root", @"domain\username", "password", AuthenticationTypes.Secure | AuthenticationTypes.Sealing);

Справочник

Ответ 4 · Joe

Вы можете использовать привилегированные учетные данные для подключения к AD или для олицетворения привилегированного пользователя, как предлагалось в других ответах.

Но это имеет последствия для безопасности, поскольку это означает, что ваши пользователи смогут использовать эти привилегированные учетные данные для других, неавторизованных целей.

Более безопасным решением было бы создание веб-службы, работающей под учетной записью службы с соответствующими разрешениями AD. Пользователи могут аутентифицироваться в веб-службе, используя проверку подлинности Windows, и веб-служба будет создавать пользователей от их имени. Он может использовать авторизацию для ограничения того, что пользователям разрешено делать (например, создавать пользователей только в своем собственном отделе).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы