Как искать Active Directory при удаленном наборе номера? - PullRequest
1 голос
/ 22 февраля 2009

Есть ли способ использовать учетные данные из списка сохраненных паролей пользователя и использовать их вместо локальных учетных данных Windows?

Мне нужно найти адрес электронной почты пользователя на основе его имени пользователя в Active Directory, чтобы он мог регистрироваться для получения обновлений электронной почты через сайт интрасети. Это кажется достаточно простым, если пользователь фактически вошел в систему на компьютере, который является частью домена, - я могу использовать его идентификационное имя для поиска в AD по его имени пользователя:

using( DirectoryEntry root = new DirectoryEntry("LDAP://admachine.domain.local") )
{
  using( DirectorySearcher searcher = new DirectorySearcher(root) )
  {
    // strip the domain from the username and find the user in AD
    var username = Regex.Replace(Page.User.Identity.Name, @".*\\", string.Empty);
    searcher.ReferralChasing = ReferralChasingOption.All;
    searcher.SearchScope = SearchScope.Subtree;
    searcher.Filter = string.Format("(&(objectCategory=user)(objectClass=person)(sAMAccountName={0}))", username);
    var foundUser = searcher.FindOne();

    // error checking occurs here...
    var email = foundUser.Properties["mail"][0].ToString();

    // TODO: stuff with the email address
  }
}

Однако, если вы работаете с ПК дома, это не сработает. Page.Identity.Name преобразуется в имя, которое я вошел на свой компьютер (MyMachine\Dave), игнорируя сохраненные учетные данные, которые я использовал для аутентификации на своем рабочем домене (WorkDomain\dave.downs).

DirectoryEntry прекрасно берет и использует сохраненные учетные данные, что позволяет мне фактически связываться с AD и выполнять поиск в нем, но я не могу найти способ использовать его в качестве var username, который будет содержать вместо этого имя пользователя моей локальной машины.

Есть ли способ на самом деле делать то, что я пытаюсь сделать, или я просто поступаю неправильно, ударяя головой о кирпичную стену?

Ответы [ 2 ]

1 голос
/ 22 февраля 2009

Я предполагаю, что вы используете IIS. Отключите анонимный доступ и включите проверку подлинности Windows. Таким образом, любой, кто не находится в домене, получит всплывающее окно, которое позволит им указать пользователя и пароль своего домена. Для пользователей, которые приходят с сервера с включенным доменом, ничего не меняется. Но таким образом вы гарантируете, что личность всегда будет разрешена для действительного пользователя домена. Так что это должно решить вашу проблему «Я вижу пользователя не из домена». Проверьте Windows Authentication Provider для получения подробной информации.

0 голосов
/ 25 февраля 2009

Если они вошли через Windows Auth, вы можете использовать:

System.Security.Principal.WindowsIdentity.GetCurrent().User

, который даст вам sid вошедшего в систему пользователя.

Отключите анонимный доступ и встроенную защиту в IIS, заставьте их войти через обычную аутентификацию через https. Это позволит убедиться, что текущий сеанс выполняется под аутентифицированным пользователем домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...