Получить полное имя пользователя из Machine Context - PullRequest
2 голосов
/ 02 октября 2009

У меня есть приложение ASP.NET, которое работает в нашей интрасети. В производственной среде я могу получить пользователя из контекста домена и получить доступ к большому количеству информации, включая его имя и фамилию (UserPrincipal.GivenName и UserPrincipal.Surname).

Наша тестовая среда не является частью рабочего домена, и тестовые пользователи не имеют учетных записей домена в тестовой среде. Итак, мы добавляем их как локальных пользователей компьютеров. Они запрашивают учетные данные при переходе на начальную страницу. Я использую следующий метод, чтобы получить 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 или Surname. Есть ли способ установить эти значения при создании пользователя (Windows Server 2008) или мне нужно пойти по-другому?

1 Ответ

4 голосов
/ 02 октября 2009

Функция в исходном вопросе должна быть изменена. Если вы попытаетесь получить доступ к возвращенному объекту UserPrincipal, вы получите исключение ObjectDisposedException

Кроме того, User.Identity.Name недоступно и должно быть передано.

Я внес следующие изменения в вышеуказанную функцию.

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 (вместо GivenName и Surname);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...