【发布时间】:2015-04-10 08:03:36
【问题描述】:
在我的 ASP.NET MVC (C#) 项目中,我必须了解用户密码是否过期?我在互联网上找到了一些关于此的答案,但它们对我没有用。
第一种方法是使用maxpwdage+pwdlastset=password expired date,第二种方法是使用useraccountcontrol属性来了解是否过期。如果该属性的值为8389120,则用户密码已过期。
虽然用户密码在 AD 中已过期,useraccountcontrolvalue 仍然是 512。我尝试使用 maxpwdage+pwdlastset 但我看不到像 maxpwdage 这样的属性(我让用户成为管理员)
Active Directory user password expiration date .NET/OU Group Policy (第一种方式) https://support.microsoft.com/en-us/kb/305144(第二种方式)
由于我上面提到的原因,它们都无法正常工作。
还有其他方法可以做到这一点,或者我如何查看maxpwdage 属性的值?
编辑:我从这里得到我想要的用户
DirectoryEntry dEntry = new DirectoryEntry
( "LDAP://a.b.c:123/OU=d, DC=e, DC=f", this.GetAdUserName(),
this.GetAdUserPassword() );
DirectorySearcher directorySearcher = new DirectorySearcher( dEntry );
directorySearcher.Asynchronous = true;
directorySearcher.CacheResults = true;
directorySearcher.Filter = "(&(sAMaccountName=" + identificationNumber + "))";
SearchResult user = directorySearcher.FindOne();
return user;
我正在检查用户的属性,但找不到maxpwdage 属性。
【问题讨论】:
-
您可能必须加载
maxPwdAge属性。userEntry.RefreshCache(new string[] { "maxPwdAge" }); -
您使用什么异常来捕获例如密码错误时发生的异常?
-
@manuchao 我试过 userEntry.RefreshCache(new string[] { "maxPwdAge" });但我仍然看不到 maxpwdage 属性。
标签: c# asp.net-mvc active-directory