Как выполнить поиск в Active Directory при удаленном удалении?


1

Есть ли способ использовать учетные данные из списка сохраненных паролей пользователя и использовать это вместо учетных данных 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, который будет содержать мою локальную машину вместо имени пользователя.

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

  0

Как настроена аутентификация веб-сервера и как именно вы набираете номер? Я немного смущен, что «Page.User.Identity.Name» может быть именем пользователя Windows полностью ненадежной машины из-за пределов домена - по крайней мере, когда использовалась проверка подлинности Windows. 22 фев. 092009-02-22 15:19:37

  0

В настоящее время аутентификация установлена ​​на Windows, и я набираю номер с помощью клиента Cisco VPN. В дополнение к набору номера с клиентом я также должен указать имя пользователя и пароль для своего домена, если я хочу что-либо сделать в этом домене, например, в браузере, поэтому это настроено в моем списке управляемых паролей. 22 фев. 092009-02-22 20:34:51

  0

Вы уверены, что аутентификация Windows также * используется * при удаленном входе в систему? Есть ли вероятность, что браузер использует базовую аутентификацию? Я все еще подозреваю, что некоторые ошибки конфигурации/неправильное ожидание здесь ... 23 фев. 092009-02-23 00:14:57

1

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

  0

Но если IIS * был установлен на анонимный, как вы объясните, что его код работает, когда он находится в компании? Должно возникнуть такая же ошибка. 23 фев. 092009-02-23 00:12:05


0

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

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

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

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