UserPrincipal.FindByIdentity возвращает значение NULL на сервере IIS - PullRequest
5 голосов
/ 15 декабря 2011

У меня есть следующий пример кода в ASP.NET

        using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain))
        {
            using (UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, HttpContext.Current.User.Identity.Name))
            {
                if (user == null)
                {
                    lbName.Text = "No User Principal";
                }
                else
                {
                    lbName.Text = user.DisplayName;
                }
            }
        }

Файл web.config выглядит как

<authentication mode="Windows" />
<authorization>
  <deny users="?" />
</authorization>

Я пробовал код на своей локальной машине для разработки (часть домена,войти в систему как пользователь домена, VS2010, .Net 4.0, Windowx XP) для локального тестирования, я могу получить UserPrincipal объект.

Если я разверну в WIndows 2003 (также является частью домена), IIS6,.Net 4.0 с пулом приложений, запущенным под Network Service, я отключил анонимный доступ.Но код не может получить объект UserPrincipal.

Нужно ли менять пул приложений для запуска под учетной записью домена, чтобы получить UserPrincipal?

1 Ответ

7 голосов
/ 15 декабря 2011

Причина, по которой он работал на вашем устройстве разработки, а не на устройстве, заключается в том, что на вашем устройстве разработки веб-сайт работал под вашим идентификатором сети, у которого были права на домен, но в работе он работает под сетевым сервисом, который не имеет прав на вашдомен.Вы можете сделать следующее:

  • Изменить учетную запись, под которой запускается пул приложений IIS, на одну домен
  • Добавить раздел олицетворения в свой файл web.config, где эта учетная запись является учетной записью домена.
  • Точно укажите имя пользователя / пароль в вашем PrincipalContext, который будет использоваться для аутентификации в домене.
...