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.