在非AD环境中更改Windows密码的权限

我们有一台运行Windows Server 2012 R2(不是任何域的成员)的计算机,以及运行在此服务器上的Web应用程序。 应用程序的用户被设置为服务器的本地Windows用户。 但用户从不login服务器本身,应用程序只是要求他们的用户名和密码,然后检查密码是否正确的服务器。

要求应用程序允许用户更改密码。 我尝试使用ADSI接口方法ChangePassword(oldPassword, newPassword)来做到这一点。 或者,ADSI方法SetPassword(newPassword) 。 但是我收到了错误消息“访问被拒绝”。

我认为,根据https://msdn.microsoft.com/en-us/library/ms180915(v=vs.90).aspx ,我需要添加ACE(AccessControlEntries)包含以下扩展权限的ACL(AccessControlList )执行通过Web访问的服务的用户:

  • Reset Password
  • Change Password

对于具有类似同名的方法。 这些在这里描述。 我发现的所有工具(“Active Directory用户和计算机”,“ADSI编辑”或“dsacls”)都可以让我读取这些工具,但在执行任何操作之前,都需要先连接到Active Directory。

而且我find的所有代码示例都需要一个Active Directory以便获取需要更改ACL的用户或组对象。

我的实验表明,我可以使该帐户成为Administrators组的成员,该组似乎具有SetPassword权限。 但是,这可能比所需要的要多得多,我只希望根据需要向帐户提供尽可能多的许可。 而且我仍然无法通过这种方式validation旧密码。

如果用户是本地用户而不是AD用户,是否没有办法简单地将ACE添加到用户帐户?