У нас есть компьютер под управлением Windows Server 2012 R2, который не является членом какого-либо домена, и веб-приложение, работающее на этом сервере. Пользователи приложения настраиваются как локальные пользователи Windows на сервере. Но пользователи никогда не заходят на сервер сами, приложение просто запрашивает у них имя пользователя и пароль, а затем проверяет сервер на правильность пароля.
Приложение запрашивает разрешение пользователям изменять свой пароль. Я пробовал использовать метод интерфейса ADSI ChangePassword(oldPassword, newPassword)
сделать это. В качестве альтернативы метод ADSI SetPassword(newPassword)
. Но я получил сообщение об ошибке «Доступ запрещен».
Я думаю, согласно https://msdn.microsoft.com/en-us/library/ms180915(v=vs.90).aspx, Мне нужно добавить ACE (AccessControlEntries), содержащие следующие расширенные права в ACL (AccessControlList) пользователя, выполняющего службу, доступ к которой осуществляется через Интернет:
Reset Password
иChange Password
для методов с одинаковым именем. Они описаны Вот. Все инструменты, которые я нашел, которые позволили бы мне их увидеть («Пользователи и компьютеры Active Directory», «ADSI Edit» или «dsacls»), требуют подключения Active Directory, прежде чем что-либо делать.
И все образцы кода, которые я нашел, также требуют Active Directory для доступа к объекту пользователя или группы, для которого необходимо изменить ACL.
Мои эксперименты показывают, что я могу сделать учетную запись членом группы администраторов, которая, похоже, имеет разрешение SetPassword. Но, вероятно, этого намного больше, чем нужно, и я хотел бы дать учетной записи столько разрешений, сколько требуется. И я все равно не смогу таким образом проверить старый пароль.
Нет ли способа просто добавить ACE в учетную запись пользователя, если пользователь является локальным пользователем, а не пользователем AD?