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