[英]C# How to get the AD user cannot change the password property from LDAP attribute userAccountControl?
我正在尝试在ASP .NET Core 5
中使用库Novell.Directory.Ldap
获取用户帐户控制属性。 当我搜索用户属性时,我发现属性名称userAccountControl
设置为某个数字。 搜索解决方案后,我能够找到:
bool isUserActive = false;
bool userMustChangePassword = false;
bool passwordNeverExpires = false;
bool passwordCannotBeChanged = false;
var flags = Convert.ToInt32(attributeSet.GetAttribute("userAccountControl").StringValue);
isUserActive = !Convert.ToBoolean(flags & 0x0002); //1. checks if user is enabled
if ((flags == 66048)) //65536+512
{
passwordNeverExpires = true; //2. Password never expires property
}
long value = Convert.ToInt64(attributeSet.GetAttribute("pwdLastSet").StringValue);
if (value == 0)
{
userMustChangePassword = true; //3. User must change password at next login
}
但我无法弄清楚如何让User cannot change password
以及account is locked
属性? 或者我如何比较像0x0040
这样的二进制值? 请帮忙
userAccountControl
值是一个位标志,这意味着数字的二进制表示中的每个位都是“开”或“关”,具体取决于它是 1 还是 0。所以十进制值没有意义。
当您检查它是否已启用时,您已经在正确检查该值:
isUserActive = !Convert.ToBoolean(flags & 0x0002); //1. checks if user is enabled
同样,在检查任何其他标志时也应该这样做。 每个值都列在文档中。
当您检查密码是否设置为永不过期时,您正在比较十进制值,这并不总是给您正确的答案。 相反,检查位值:
passwordNeverExpires = Convert.ToBoolean(flags & 0x10000);
如果用户无法更改密码,则类似:
var userCannotChangePassword = Convert.ToBoolean(flags & 0x0040);
并且帐户被锁定:
var accountLocked = Convert.ToBoolean(flags & 0x0010);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.