Получите UPN или электронную почту для входа в систему в веб-приложении .NET.
Я не разработчик .NET, и у меня такое чувство, что это было бы тривиально для кого-то, кто:
У меня есть веб-приложение С#, которое делает пользователя учетными данными пользователя вошедшего в систему пользователя. В настоящее время он использует SID, который исходит от
System.Security.Principal.WindowsIdentity.GetCurrent().User.Value
Мне нужно получить либо имя пользователя входа в систему или адрес электронной почты пользователя (как определено в активном каталоге), а не идентификатор SID. GetCurrent() возвращает объект типа WindowsIdentity; в деталях для пользователей WindowsIdentity:
MSDN: пользователи WindowsIdentity
Я не вижу ничего похожего на то, что это даст мне UPN или электронную почту. Как я могу вытащить эту информацию для использования, либо путем подачи SID в какую-то другую функцию, либо в первую очередь называя что-то другое.
Ответы
Ответ 1
Между тем (.NET 3.5) это однострочный:
System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress
для электронной почты или
System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName
для UPN.
Ответ 2
Чтобы запросить активный каталог с помощью поискового устройства, вам нужно сделать что-то вроде этого (полностью непроверенный код):
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
}
}
}
Ответ 3
Try:
System.Security.Principal.WindowsIdentity.GetCurrent().Name