DirectoryServicesCOMException при работе с Системой. DirectoryServices. AccountManagement

Я пытаюсь определить, является ли пользователь членом данной группы, использующей Систему. DirectoryServices. AccountManagment.

  • Я делаю эту внутреннюю часть SharePoint WebPart в SharePoint 2007 в 64-разрядной системе.
  • Проект предназначается для.NET 3.5
  • Олицетворение включено в web.config.
  • Рассматриваемый Сайт IIS использует Пул приложений IIS с пользователем домена, настроенным как идентификационные данные.

Я могу инстанцировать a PrincipalContext как таковой:

PrincipalContext pc = new PrincipalContext(ContextType.Domain)

Затем, я пытаюсь захватить принципал:

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
   GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\somegroup");
   // snip: exception thrown by line above.
}

И вышеупомянутое и UserPrincipal.FindByIdentity с пользователем SAM бросают a DirectoryServicesCOMException: "Отказ входа в систему: имя Неизвестного пользователя или неверный пароль"

Я попытался передать в полном SAMAccountName также FindByIdentity (в форме MYDOMAIN\username) или просто имя пользователя без изменения в поведении. Я попытался выполнить код с другими учетными данными с помощью обоих HostingEnvironment.Impersonate и SPSecurity.RunWithElevatedPrivileges подходы и также испытывают тот же результат.

Я также попытался инстанцировать своего контекста с доменным именем на месте:

Principal Context pc = new PrincipalContext(ContextType.Domain, "MYDOMAIN");

Это бросает a PrincipalServerDownException: "С сервером нельзя было связаться".

Я работаю над обоснованно укрепленным сервером. Я не заблокировал систему вниз, таким образом, я не уверен точно, что было сделано к ней. Если существуют учетные данные, я должен выделить своему пользователю идентификационных данных пула или в политике безопасности домена для них для работы, я могу настроить домен соответственно. Есть ли какие-либо настройки, которые препятствовали бы тому, чтобы мой код работал? Я пропускаю что-то в самом коде? Разве это просто не возможно в сети SharePoint?

Править: Учитывая дальнейшее тестирование, мой код функционирует правильно при тестировании в Консольном приложении, предназначающемся для.NET 4.0. Я был нацелен на другую платформу, потому что я не имел AccountManagement в наличии для меня в консольном приложении при предназначении для.NET 3.5 по некоторым причинам.

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
using (UserPrincipal adUser = UserPrincipal.FindByIdentity(pc, "MYDOMAIN\joe.user"))
using (GroupPrincipal adGroup = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\user group"))
{
   if (adUser.IsMemberOf(adGroup))
   {
       Console.WriteLine("User is a member!");
   }
   else
   {
       Console.WriteLine("User is NOT a member.");
   }
}

Что варьируется по моей среде SharePoint, которая могла бы мешать этой функции выполняться?

6
задан sdcvvc 25 May 2010 в 15:09
поделиться