Получение полного имени пользователя из контекста компьютера
-
19-09-2019 - |
Вопрос
У меня есть ASP.NET приложение, которое работает в нашей внутренней сети.В рабочей среде я могу получить пользователя из контекста домена и иметь доступ к большому количеству информации, включая его имя и фамилию (UserPrincipal.GivenName и UserPrincipal.Familyname).
Наша тестовая среда не является частью производственного домена, и у пользователей тестирования нет учетных записей домена в тестовой среде.Итак, мы добавляем их как пользователей локального компьютера.Им предлагается ввести учетные данные, когда они переходят на стартовую страницу.Я использую следующий метод, чтобы получить UserPrincipal
public static UserPrincipal GetCurrentUser()
{
UserPrincipal up = null;
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
}
if (up == null)
{
using (PrincipalContext context = new PrincipalContext(ContextType.Machine))
{
up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
}
}
return up;
}
Проблема, с которой я сталкиваюсь здесь, заключается в том, что когда UserPrinicipal повторно запрашивается при ContextType == Machine, я не получаю такие свойства, как GivenName или Фамилия.Есть ли способ установить эти значения при создании пользователя (Windows Server 2008) или мне нужно сделать это другим способом?
Решение
Функция в исходном вопросе должна быть изменена.Если вы попытаетесь получить доступ к возвращаемому объекту UserPrincipal, вы получите исключение ObjectDisposedException
Кроме того, Пользователь.Идентификатор.Имя недоступно и должно быть передано.
Я внес следующие изменения в описанную выше функцию.
public static UserPrincipal GetUserPrincipal(String userName)
{
UserPrincipal up = null;
PrincipalContext context = new PrincipalContext(ContextType.Domain);
up = UserPrincipal.FindByIdentity(context, userName);
if (up == null)
{
context = new PrincipalContext(ContextType.Machine);
up = UserPrincipal.FindByIdentity(context, userName);
}
if(up == null)
throw new Exception("Unable to get user from Domain or Machine context.");
return up;
}
Кроме того, свойство UserPrincipal, которое мне нужно использовать, - это DisplayName (вместо заданных имени и фамилии);