繁体   English   中英

C# 如何获取 AD 用户无法从 LDAP 属性 userAccountControl 更改密码属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM