System.UnauthorizedAccessException, вызывающий UserPrincipal.SetPassword - PullRequest
2 голосов
/ 27 сентября 2011

когда я запускаю этот код

PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
                                                                adHost,
                                                                adRoot,
                                                                ContextOptions.SimpleBind,
                                                                adUsername,
                                                                adPassword);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username);
user.SetPassword(password);
user.Save();

Я получаю это исключение

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.UnauthorizedAccessException: One or more input parameters are invalid

Код запускается из командной строки с помощью "runas / user: (domainadminuser также является локальнымadmin) Контекст создается с использованием тех же учетных данных (domainadminuser). Я проверил, правильно ли заполнены все имена пользователей, пароли и т. д. Это как-то связано с тем, как я создаю PrincipalContext?

Я полностьюЗастрял. У кого-нибудь есть какие-нибудь идеи?

Спасибо

[ОБНОВЛЕНИЕ] Вот код, который я использовал, чтобы заставить его работать. Я думаю, что, возможно, именно то, что выкинуло из ValidateCredentialsэто в жизнь (возможно)

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, parameters["adHost"] );
ctx.ValidateCredentials(parameters["adUsername"], parameters["adPassword"], ContextOptions.SimpleBind);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username);
user.SetPassword(password);
user.Save();

Ответы [ 3 ]

5 голосов
/ 27 сентября 2011

Ниже приведен код, который отлично работает для системы управления запросами пароля, которую мы разработали самостоятельно, попробуйте и дайте мне знать:

PrincipalContext context = new PrincipalContext( ContextType.Domain, null, adAdminLogin, adAdminPassword );
UserPrincipal user = UserPrincipal.FindByIdentity( context, adUserLogin );
user.SetPassword( adUserNewPassword );
0 голосов
/ 02 августа 2017

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

PrincipalContext oPrincipalContext = 
   new PrincipalContext (ContextType.Domain, "Name", "DefaultOU(if required)", 
   ContextOptions.Negotiate, "Service Account(if required)", 
   "Service password");
0 голосов
/ 27 сентября 2011

Что касается Active-Directory со стандартным протоколом LDAP, простое связывание без SSL не позволяет изменять любой пароль.Очевидно, что здесь вы используете классы, которые могут взаимодействовать с вашим сервером по нестандартному протоколу, но ваш контекстный параметр SimpleBind может переключиться на стандартный LDAP.взгляните на код @CodeCanvas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...