Я пытаюсь определить, является ли пользователь членом данной группы, использующей Систему. DirectoryServices. AccountManagment.
Я могу инстанцировать 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, которая могла бы мешать этой функции выполняться?
Я добавил учетную запись, используемую пулом приложений IIS, в группу администраторов, и эта проблема была решена.