Asp.net 使用AdMembership Provider在下次登录时更改表单登录的密码
我正在做asp.net,使用AdMembership proivder的FormsAuthentication 我必须手动编写“下次登录时更改密码”屏幕,因为提供程序不支持该屏幕 我呼吁:Asp.net 使用AdMembership Provider在下次登录时更改表单登录的密码,asp.net,active-directory,forms-authentication,change-password,Asp.net,Active Directory,Forms Authentication,Change Password,我正在做asp.net,使用AdMembership proivder的FormsAuthentication 我必须手动编写“下次登录时更改密码”屏幕,因为提供程序不支持该屏幕 我呼吁: if (Membership.Provider.ChangePassword(cpCv.LoginName, cpCv.OldPassword, cpCv.NewPassword)) 验证用户并更改密码(但不清除“下次登录时”标志) 但它总是失败, (我假设在设置“下次登录时更改密码标志”时,成员身份验证失
if (Membership.Provider.ChangePassword(cpCv.LoginName, cpCv.OldPassword, cpCv.NewPassword))
验证用户并更改密码(但不清除“下次登录时”标志)
但它总是失败,
(我假设在设置“下次登录时更改密码标志”时,成员身份验证失败。)
验证用户的最简单方法是什么,以便在重置密码和清除“下次登录时”标志之前确保“旧密码”和“用户名”匹配
我有重置密码和清除标志的功能,是验证让我卡住了
还尝试了这段代码,如果重置标志为false,它将登录,如果为true,它将无法登录
DirectoryEntry de = new DirectoryEntry( path, "jcsn\\"+AdUserName, AdPassword );
try
{
//Bind to the native AdsObject to force authentication.
object obj = de.NativeObject;
DirectorySearcher search = new DirectorySearcher( de );
search.Filter = "(SAMAccountName=" + AdUserName + ")";
search.PropertiesToLoad.Add( "cn" );
SearchResult result = search.FindOne();
if ( null == result )
{
return false;
}
}
catch ( Exception ex )
{
throw new Exception( "Error authenticating user. " + ex.Message );
}
谢谢
Eric-有一个名为Membership.Validate的函数。我认为您的代码如下所示:
if(Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
{
//Proceed with the change
}
我不知道为什么您对ChangePassword的调用失败了--我认为ChangePassword可能会调用ValidateUser。虽然这是一个旧线程,但似乎没有得到响应 在中,当系统管理员检查了“用户下次登录时必须更改密码”的帐户选项时,开发人员以成员身份与Microsoft联系。ValidateUser()返回false: ActiveDirectoryMembershipProvider不允许具有 “用户下次登录时必须更改密码…”标志设置为登录。 根据微软的说法,这是故意的:因为 ActiveDirectoryMembershipProvider未提供强制的机制 用户在登录时提供新密码,身份验证被阻止 他们接着给出了一个提示,他们在FormsAuthentication中使用了安全API,但没有提供示例
有人有什么想法吗?if(Membership.ValidateUser(txtsername.Text,txtPassword.Text))也返回false。。我认为更改密码失败是因为它调用了ValidateUser,而ValidateUser失败是因为AdMembershipProvider不支持changePasswordOnNextLogon,并且失败了。我想我需要一种不使用提供程序的身份验证方法。ChangePAssword调用validate user,validate user在重置为true时失败,这就是AdMembershipProvider的实现方式。因此,整个方法都不适用。对于您的问题,我没有一个真正的解决方案,但是看看System.DirectoryServices.AccountManagement命名空间,它可能允许您减少代码量,并可能为您提供修复方案。谢谢!我刚刚发布了另一个问题,因为我尝试使用该名称空间,但在身份验证方面遇到了困难。我希望它会有帮助,因为它可以很容易地清除标志,然后重置它。