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.SimpleBind
SetPassword
может не работать
PrincipalContext oPrincipalContext = new PrincipalContext
(ContextType.Domain, "Name", "DefaultOU(if required)", ContextOptions.Negotiate,
"Service Account(if required)", "Service password");