System.DirectoryServices.AccountManagement.UserPrincipal - метод ChangePassword выдает исключение

Я пытаюсь реализовать функциональность ChangePassword на ActiveDirectory через UserPrincipal. Код выглядит так:

        using System.DirectoryServices.AccountManagement;

        private PrincipalContext Context { get; set; }

        ...
        Context = new PrincipalContext(ContextType.Domain,
            AdDomain,
            AdRoot,
            ContextOptions.SimpleBind,
            AdUsername,
            AdPassword)
        ...

        public bool ChangePassword(string login, string password, string newPassword, out string message)
        {
            using (var foundUser = UserPrincipal.FindByIdentity(Context, IdentityType.SamAccountName, login))
            {
                try
                {
                    foundUser.ChangePassword(password, newPassword);
                    foundUser.Save();
                }
                catch (Exception e)
                {
                    message = e.Message;
                    return false;
                }

                return true;
            }
        }

Когда я пытаюсь проверить это на своем компьютере с Windows 10, я получаю исключение для ChangePassword, System.Runtime.InteropServices.COMException - один или несколько входных параметров недопустимы.

Однако, когда я запускаю этот точно такой же код в том же проекте при подключении к тому же домену AD на моем компьютере с Windows 7, он запускается без ошибок и меняет пароль. Что может быть причиной такого различного поведения в средах, и почему эта ошибка происходит?

1 ответ

Когда контекст создан, обязательно установите ContextOptions в ContextOptions.Negotiate, Если вы упомянули ContextOptions.SimpleBindSetPassword может не работать

PrincipalContext oPrincipalContext = new PrincipalContext
               (ContextType.Domain, "Name", "DefaultOU(if required)", ContextOptions.Negotiate,
               "Service Account(if required)", "Service password");
Другие вопросы по тегам