我正在使用PrincipalContext的 验证证书 方法来验证进入活动目录的身份,但由于某些原因,尽管密码是正确的,而且没有过期,它还是返回false。我已经检查了用户的状态与 用户主体但尽管用户已被启用且未被锁定,它仍然返回false。我也确定最后设置的密码没有过期。
是否有其他因素使ValidateCredentials返回false?
使用的代码。
bool expired = false;
bool blocked = false;
bool disabled = false;
int failedLogins;
Resultado resul = new Resultado();
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, Config.ActiveDirectory.Server,
Directory,
Config.ActiveDirectory.User,
Config.ActiveDirectory.Pass);
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, userName);
if (user != null)
{
disabled = (user.Enabled == null || !user.Enabled.Value);
blocked = user.IsAccountLockedOut();
expired = user.LastPasswordSet == null || DateTime.UtcNow.Subtract(user.LastPasswordSet.Value).Days >= Config.ActiveDirectory.MaxPassAge;
failedLogins = user.BadLogonCount;
if (domainContext.ValidateCredentials(userName, password))
resul.ResultCode = 0;
else
{
user = UserPrincipal.FindByIdentity(domainContext, userName);
if (disabled)
resul.ResultCode = 7;
else if (blocked)
resul.ResultCode = 3;
else if (failedLogins != user.BadLogonCount)
resul.ResultCode = 2;
else
resul.ResultCode = 4;
}
}
else
resul.ResultCode = 1;
return resul;
你也可以使用以下方法检查账户的到期日期 AccountExpirationDate
属性,检查下次登录时是否必须更改密码。
另外,检查下次登录时是否必须更改密码。该 LastPasswordSet
财产将 null
如果是这样的话。
中也有一个说明。文件的 ValidateCredentials
可能是相关的。
২২২২২২২২২২২২২২২২২২২২২২২২২২
userName
参数必须采用 帐号 (例如: 坎贝尔)而不是 域/用户名 或 username@domain.
你有没有试过用该用户名和密码登录电脑?那是确定以下情况的最佳方法 ValidateCredentials
是骗你还是不骗你。
好奇:你为什么要设置 user
到同样的事情,在你的 else
块?这似乎没有必要。