C# Active Directory PrincipalContext / UserPrincipal.Ошибка IsMemberOf
поэтому у меня есть вопрос, который я честно не совсем уверен, как спросить. По сути, у меня есть немного кода, который фантастически работает на моей локальной машине, когда я ее запускаю. Как только я публикую его на нашем веб-сервере разработки, он терпит неудачу. Я не уверен, что это проблема установки IIS, web.проблема конфигурации или проблема кодирования.
вот фрагмент кода
bool isMember = false;
PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);
if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim()))
{
isMember = true;
}
return isMember;
где я передаю имя пользователя и группу, и он говорит мне, является ли этот пользователь членом этой группы. Не проблема. Отлично работает на моем машина. Я пошел опубликовать этот код на веб-сервере, и он терпит неудачу, когда он попадает в строку
UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);
он выдает эту ошибку:
[DirectoryServicesCOMException (0x80072020): произошла ошибка операций.]
Система.DirectoryServices.Класс directoryentry.Bind (Boolean throwIfFail) +788
Система.DirectoryServices.Класс directoryentry.Bind () +44
Система.DirectoryServices.Класс directoryentry.get_AdsObject () +42
Система.DirectoryServices.PropertyValueCollection.PopulateList() +29
Система.DirectoryServices.PropertyValueCollection..ctor (DirectoryEntry запись, строка propertyName) + 63
Система.DirectoryServices.PropertyCollection.get_Item (строка propertyName) +163 Система.DirectoryServices.Бухгалтерия.класс PrincipalContext.DoLDAPDirectoryInitNoContainer() +521217
Система.DirectoryServices.Бухгалтерия.класс PrincipalContext.Додомайнинит() +51
Система.DirectoryServices.Бухгалтерия.класс PrincipalContext.Инициализировать() +141
Система.DirectoryServices.Бухгалтерия.класс PrincipalContext.get_QueryCtx() +42
Система.DirectoryServices.Бухгалтерия.Главный.FindByIdentityWithTypeHelper(PrincipalContext контекст, тип principalType, Nullable ' 1 identityType, строка identityValue, Датавремя refDate) +29
Система.DirectoryServices.Бухгалтерия.Метод userprincipal.FindByIdentity (PrincipalContext контекст, строка identityValue) +95
Космический.Сеть.Авторизоваться.btnSubmit_Click (отправитель объекта, EventArgs e) в C:cosmicCosmic - ... WebЛогин.аспн.в CS:79
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.WebControls.Кнопка.RaisePostBackEvent (String eventArgument) +154
Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691
есть идеи, где это может потерпеть неудачу?
1 ответов
мое первое предположение: эта учетная запись пользователя, под которой вы запускаете этот код, не имеет необходимых разрешений для запроса Active Directory.
чтобы исправить это, в основном, вам нужно менять свой конструктор из этого:
PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain);
(устанавливает соединение с AD с текущими учетными данными по умолчанию, под которыми работает этот код)
для этого:
PrincipalContext ADDomain =
new PrincipalContext(ContextType.Domain, "DOMAIN", useraccount, password);
и предоставить имя пользователя и пароль для учетной записи пользователя, know имеет достаточные привилегии для запроса Active Directory.