gpt4 book ai didi

c# - 当 "User must change password on next log on"时,LDAP 验证失败。有什么解决办法吗?

转载 作者:行者123 更新时间:2023-12-01 19:47:22 34 4
gpt4 key购买 nike

设置“用户下次登录时必须更改密码”时,我在用户验证方面遇到问题。

以下是我验证用户的方法:

Boolean ValidateUser(String userName, String password)
{
try
{
var userOk = new DirectoryEntry("LDAP://<my LDAP server>",
userName,
password,
AuthenticationTypes.Secure
| AuthenticationTypes.ServerBind);
return true;
}
catch (COMException ex)
{
if (ex.ErrorCode == -2147023570) // 0x8007052E -- Wrong user or password
return false;
else
throw;
}
}

当设置“必须更改密码”时,COMException 会按预期被捕获,但是 ErrorCode 与密码错误时相同。

有人知道如何解决这个问题吗?

我需要一个返回码来表明密码正确并且用户必须更改密码。

我不想在 C# 中实现 Kerberos 只是为了在用户必须更改密码时检查该死的标志。

最佳答案

在互联网上进行了长时间的搜索、对错误消息进行了一些实证研究以及通过 Win32API 进行了一些探索之后,我想出了一个迄今为止有效的解决方案。

Boolean ValidateUser(String userName, String password)
{
try
{
var user = new DirectoryEntry("LDAP://<my LDAP server>",
userName,
password);
var obj = user.NativeObject;
return true;
}
catch (DirectoryServicesCOMException ex)
{
/*
* The string " 773," was discovered empirically and it is related to the
* ERROR_PASSWORD_MUST_CHANGE = 0x773 that is returned by the LogonUser API.
*
* However this error code is not in any value field of the
* error message, therefore we need to check for the existence of
* the string in the error message.
*/
if (ex.ExtendedErrorMessage.Contains(" 773,"))
throw new UserMustChangePasswordException();

return false;
}
catch
{
throw;
}
}

关于c# - 当 "User must change password on next log on"时,LDAP 验证失败。有什么解决办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5664482/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com