Ad Asp.Net更改密码

时间:2011-04-28 16:45:48

标签: asp.net-mvc active-directory change-password

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

我们还要求每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;
    }

但即使我知道用户密码已被更改,我也会一直无效。

任何人都有任何提示或建议?我在寻找错误的财产吗?

2 个答案:

答案 0 :(得分:1)

嗯这个属性被复制,所以应该始终可用。 尝试使用命令行脚本查看它是否显示:

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

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

答案 1 :(得分:0)

如果您使用System.DirectoryServices.AccountManagement,则会有一个公开的方法让User Principal立即使密码到期。因此,就像使用oUserPrincipal.ExpirePasswordNow();这样称呼它一样容易,请参阅this article