Получите UPN или электронную почту для входа в систему в веб-приложении .NET.

Я не разработчик .NET, и у меня такое чувство, что это было бы тривиально для кого-то, кто:

У меня есть веб-приложение C #, которое делает пользователя учетными данными пользователя вошедшего в систему пользователя. В настоящее время он использует SID, который исходит из

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

Мне нужно получить либо имя пользователя или адрес пользователя UPN (как определено в активном каталоге), а не идентификатор SID. GetCurrent () возвращает объект типа WindowsIdentity; в деталях для пользователей WindowsIdentity:

MSDN: члены WindowsIdentity

Я не вижу ничего похожего на то, что это дало бы мне UPN или электронную почту. Как я могу вытащить эту информацию для использования, либо путем подачи SID в какую-то другую функцию, либо с помощью чего-то другого в первую очередь.

Между тем (.NET 3.5) это однострочный:

 System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress 

для электронной почты или

 System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName 

для UPN.

Чтобы запросить активный каталог с помощью поискового устройства, вам нужно сделать что-то вроде этого (полностью непроверенный код):

  string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; string ldapPath = "LDAP://domain.company.com"; public string GetEmail(string userName, string ldapPath) { using (DirectoryEntry root = new DirectoryEntry(ldapPath)) { DirectorySearcher searcher = new DirectorySearcher(root); searcher.Filter = string.Format(@"(&(sAMAccountName={0}))", userName); searcher.PropertiesToLoad = "mail"; SearchResult result = searcher.FindOne(); if (result != null) { PropertyValueCollection property = result.Properties["mail"]; return (string)property.Value; } else { // something bad happened } } } 

Пытаться:

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