System.DirectoryServices и IIS — получить имя пользователя

Я не уверен, что это заходит слишком далеко на территорию системного администратора, но я все равно задам свой вопрос :)

Я разрабатываю веб-сайт в MVC3. Сайт использует ограниченное делегирование для олицетворения пользователя в домене Windows и подключения к SQL Server под этим пользователем. Это все работает без проблем.

Что я пытаюсь сделать, так это получить доступ к свойству отображаемого имени имени пользователя, вошедшего в систему (используя следующий код):

string displayName;
var context = new PrincipalContext(ContextType.Domain, "contoso");
var userPrincipal = UserPrincipal.FindByIdentity(context,
                                  IdentityType.SamAccountName,
                                  userName);
displayName = userPrincipal.DisplayName;

Я получаю сообщение об ошибке операций LDAP:

Сведения об исключении: System.Runtime.InteropServices.COMException: Произошла ошибка операции.
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(контекст PrincipalContext, IdentityType identityType, String identityValue)

Странно то, что:

  • Эта операция выполняется успешно на приемочном тестовом сервере (та же конфигурация, тот же домен, тот же пользователь пула приложений, другой компьютер).
  • Эта операция завершается успешно в консольном приложении после использования удаленного рабочего стола для подключения к рабочему компьютеру под пользователем, запускаемым пулом приложений ASP.NET.
  • Операция выполняется со случайной рабочей станции с обычной учетной записью домена.
  • Сбой операции на веб-сайте рабочего сервера.

person Bas    schedule 15.11.2011    source источник
comment
Есть ли у локальной учетной записи права на запросы к AD? Я думаю из коробки пользователь на домене делает, может локальная учетная запись ограничена? Снято в темноте, я полагаю. Я заставил ваш код нормально работать локально, но у меня есть некоторые дополнительные привилегии от Infrastructure Ogres.   -  person Ryan Anderson    schedule 15.11.2011


Ответы (1)


Я решил это, установив PhysicalPathCredentials веб-сайта в учетную запись. Но я не могу понять причину проблемы, но это работает.

person Bas    schedule 16.11.2011