Получить UPN или адрес электронной почты для вошедшего в систему пользователя в веб-приложении.NET
Я не разработчик.NET, и у меня есть чувство, что это будет тривиально для кого-то, кто:
У меня есть веб-приложение C#, которое делает пользователя учетными данными пользователя, вошедшего в систему. В настоящее время он использует SID, который исходит от
System.Security.Principal.WindowsIdentity.GetCurrent().User.Value
Мне нужно получить либо имя пользователя UPN, либо адрес электронной почты (как определено в активной директории) вместо SID. GetCurrent() возвращает объект типа WindowsIdentity; глядя на детали для членов WindowsIdentity:
Я не вижу ничего, что выглядит так, как будто это даст мне либо UPN, либо письмо по электронной почте. Как я могу получить эту информацию для использования, либо введя SID в какую-то другую функцию, либо вызвав что-то другое в первую очередь.
3 ответа
Между тем (.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