无法在 C# 中获取用户的 Active Directory 启用状态

问题描述 投票:0回答:1

我对AD不是很熟悉,也没有做过管理。请原谅有关 AD 的任何不正确术语或可能存在冲突/不正确的说法。我正在尝试在 C# 应用程序中收集数据以根据 AD 组等控制访问,但在确定用户是否启用时遇到问题。

我们的用户分为两类。内部员工(使用默认主要组,我认为是“域用户”)和使用自定义主要组(“域用户自定义”)的合作伙伴组织的员工。这可能与我正在处理的问题有任何关系,也可能没有任何关系,但我将其包括在内,以防它相关。

基于这个SO问题我认为UserPrincipal上的.Enabled属性并不总是可靠的。在我的特定情况下,这是正确的,因为我在域用户组和域用户自定义组中测试过的用户总是显示 false,无论它们是否被禁用。我自己的用户帐户(在域用户中)是迄今为止唯一正确设置的帐户。我还尝试检查 DirectoryEntry 中的 UserAccountControl 标志,所有用户(除了我的)都返回 NULL,因此我无法检查 AccountDisabled (0x2) 标志。

我还尝试使用 LDAP 查询来查找所有被禁用的用户 (UserAccountControl:1.2.840.113556.1.4.803:=2),但不包括域用户自定义中的用户 - 但域用户出现在该搜索中。

我让运营团队将其中一个已禁用的帐户从“域用户自定义”移至“域用户”,只是为了看看它是否会填充 UserAccountControl 标志,但事实并非如此。

如何确定所有用户的启用状态或获取要填充的 UserAccountControl 标志?

附加说明 - 我没有使用我的个人凭据向 DC 进行身份验证,我有一个用于从 AD 读取的专用登录名/密码。我正在管理员模式下运行 Visual Studio 2019。

c# active-directory ldap
1个回答
0
投票

Active Directory(以及一般的传统 LDAP 目录)支持按属性访问控制。 AD 中的

userAccountControl
属性分组在“帐户限制”下,“用户”对象的默认 ACL 只允许非常有限的一组实体读取这些属性 - 如果我的理解是正确的,这仅包括“Pre -Windows 2000 兼容访问”和“RAS 和 IAS 服务器”组(当然还有域/企业管理员)。正在读取的条目的成员身份通常无关紧要。

新域已将经过身份验证的用户一揽子添加到“Windows 2000 之前的兼容访问”中,但一般最佳实践建议删除该条目并仅根据需要添加特定成员(因此“实体集非常有限”)。

因此您必须与域管理员讨论此问题。

(例如,如果您的程序需要访问各种属性,则可能需要将专用帐户添加到“Pre-Windows 2000 Compatible Access”(尽管该方法的历史名称似乎仍然是 MS 批准的方法)组;更不用说这是最简单的方法),或者如果他们认为这授予了过多的“读取”访问权限,他们可能会将您添加到其他组或定义自定义 ACL)。

© www.soinside.com 2019 - 2024. All rights reserved.