0

我们使用 ASP.NET MVC 和 AdMembership 提供程序进行登录,并且由于各种原因不得不实现我们自己的“下次登录时更改密码”功能。

我们还有一个 nist 要求,即每 24 小时不允许超过一次更改。所以它在 AD 中是这样设置的。

我们需要的是在将密码重置为默认值时忽略这一要求,我们希望学生在下次登录时被迫更改密码,即使是在 24 小时之前。

这是我的尝试。基本上,我想在重置密码后将 PwdLastSet 属性更改为超过 24 小时的值。

    if ( bSetToDefault )
    {
        var adDate                  = userToActOn.ADEntry.Properties[ "PwdLastSet" ][ 0 ];
        DateTime passwordLastSet    = DateTime.FromFileTime( ( Int64 ) adDate );
        passwordLastSet             = System.DateTime.Now.AddHours( -25 );
        long filetime               = passwordLastSet.ToFileTimeUtc();
        userToActOn.ADEntry.Properties[ "PwdLastSet" ][ 0 ] = filetime;
    }

但是,即使我知道用户密码已更改,我也会不断返回 null。

有人有任何提示或建议吗?我在找错房产吗?

4

2 回答 2

1

嗯,此属性已复制,因此应始终可用。尝试命令行脚本看看它是否显示:

http://www.rlmueller.net/PwdLastChanged.htm

可能是因为它是 64 位日期而不进行转换?试试这个脚本,看看它是否有效。如果是这样,请查看其中的 Integer8Date 过程以进行日期转换。

于 2011-04-28T17:23:32.853 回答
1

如果您使用 System.DirectoryServices.AccountManagement,则用户主体有一个公开的方法可以立即使密码过期。所以它就像调用它一样简单,oUserPrincipal.ExpirePasswordNow(); 有关使用它的更多信息,请参阅这篇文章

于 2011-04-28T20:57:06.257 回答