c# – LDAP密码到期日
发布时间:2020-12-15 22:25:13 所属栏目:百科 来源:网络整理
导读:我有一个使用Active Directory进行身份验证的Web应用程序.我想添加一个选项,在密码即将到期时通知用户. 我设法做了一些事情,但我遇到的问题是到期天数是负数(daysLeft参数),但我仍然可以登录. string domainAndUsername = @"LDAP://ldapUrl";DirectoryEntry
我有一个使用Active Directory进行身份验证的Web应用程序.我想添加一个选项,在密码即将到期时通知用户.
我设法做了一些事情,但我遇到的问题是到期天数是负数(daysLeft参数),但我仍然可以登录. string domainAndUsername = @"LDAP://ldapUrl"; DirectoryEntry root = new DirectoryEntry(ldapServer,userID,userPwd,AuthenticationTypes.Secure); DirectorySearcher mySearcher = new DirectorySearcher(root); SearchResultCollection results; string filter = "maxPwdAge=*"; mySearcher.Filter = filter; results = mySearcher.FindAll(); long maxDays = 0; if (results.Count >= 1) { Int64 maxPwdAge = (Int64)results[0].Properties["maxPwdAge"][0]; maxDays = maxPwdAge / -864000000000; } mySearcher = new DirectorySearcher(root); mySearcher.Filter = "(&(objectCategory=user)(samaccountname=" + userID + "))"; results = mySearcher.FindAll(); long daysLeft = 0; if (results.Count >= 1) { var lastChanged = results[0].Properties["pwdLastSet"][0]; daysLeft = maxDays - DateTime.Today.Subtract( DateTime.FromFileTime((long)lastChanged)).Days; } 由于用户无法登录,如果帐户已过期,我猜我的错误是计算帐户到期之前的剩余天数…但我似乎无法找到它的位置. 解决方法
这个片段工作正常,我还有三天要改变我的pw,包括今天:
public static void Main(string[] args) { const ulong dataFromAD = 0xFFFFE86D079B8000; var ticks = -unchecked((long)dataFromAD); var maxPwdAge = TimeSpan.FromTicks(ticks); var pwdLastSet = new DateTime(2015,12,16,9,19,13); var pwdDeadline = (pwdLastSet + maxPwdAge).Date; Console.WriteLine(pwdDeadline); Console.WriteLine(pwdDeadline - DateTime.Today); Console.ReadKey(true); } 我还验证了TimeSpan.FromTicks( – (long)results [0] .Properties [“maxPwdAge”] [0])和DateTime.FromFileTime((long)results [0] .Properties [“pwdLastSet”] [0])表达式正确地从我们的AD中提取值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |