c# - 使用 C# 强制本地用户在下次登录时更改密码

标签 c# asp.net directoryentry

我正在为 ASP.NET 中的 Web 应用程序编写一个函数,其中客户端登录到服务器计算机,这是针对服务器上的本地用户进行 Windows 身份验证的。我正在编写的函数会重置用户密码并将新密码通过电子邮件发送给他们。我这样做是这样的:

String userPath = "WinNT://"  + Environment.MachineName + "/" + username.Text;
DirectoryEntry de = new DirectoryEntry(userPath);
de.Invoke("SetPassword", new object[] { password });

我还如何检查标志以强制用户在下次使用通过电子邮件发送给他们的密码登录时更改密码?我试过像这样使用 pwdLastSet:

de.Properties["pwdLastSet"].Value = 0;

但这显然只适用于 LDAP,不适用于 WinNT,而我是在本地进行的。

有比我更了解的专家吗?我什至尝试寻找一种通过命令行执行此操作的方法,以便我可以创建一个进程,但我也无法找到一种方法来执行此操作。

最佳答案

对于 WinNT,必须将值设置为 1 而不是 0,并且属性名称是“PasswordExpired”而不是“pwdLastSet”;见http://msdn.microsoft.com/en-us/library/aa746542(VS.85).aspx

换句话说,对 WinNT 执行此操作:

de.Properties["PasswordExpired"].Value = 1;

(这很令人困惑,我知道,但是对于 LDAP,您需要将属性“pwdLastSet”设置为 0。不一致怎么办!)

关于c# - 使用 C# 强制本地用户在下次登录时更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886713/

相关文章:

c# - 如何将 C# 中的颜色动态更改为十六进制值?

mysql - 带有 mysql 数据库的 .net 网站

c# - 访问 ASP.NET 中 App_Code 中未声明的类

c# - 如何知道我的 DirectoryEntry 是否真的连接到我的 LDAP 目录?

c# - Angular2+ C# Web Api - 服务器端保存错误时间的日期时间

c# - 如何避免ef以上业务逻辑类中的重复代码?

c# - 使用 Emgu OpenCV 计算直方图

jquery - Firefox 上的 div 问题中的图像

c# - 根据 AD 组检查用户登录

c# - 在使用 LDAP 验证之前散列密码