c# - 将 UserPrincipal.FindByIdentity 和 PrincipalContext 与嵌套 OU 结合使用

标签 c# active-directory principalcontext

这是我想要实现的目标: 我有一个大约 5 层深的嵌套 OU 结构。

OU=Portal,OU=Dev,OU=Apps,OU=Grps,OU=Admin,DC=test,DC=com

我正在尝试查明用户是否具有权限/是否存在于 OU=Portal。

这是我目前拥有的片段:

PrincipalContext domain = new PrincipalContext(
    ContextType.Domain,
    "test.com",
    "OU=Portal,OU=Dev,OU=Apps,OU=Grps,OU=Admin,DC=test,DC=com");

UserPrincipal user = UserPrincipal.FindByIdentity(domain, myusername);
PrincipalSearchResult<Principal> group = user.GetAuthorizationGroups();

由于某些未知原因,上述代码生成的值 user 始终为 null。但是,如果我按如下方式删除所有 OU:

PrincipalContext domain = new PrincipalContext(
    ContextType.Domain,
    "test.com",
    "DC=test,DC=com");

UserPrincipal user = UserPrincipal.FindByIdentity(domain, myusername);
PrincipalSearchResult<Principal> group = user.GetAuthorizationGroups();

这会很好地工作并返回正确的用户。我只是想减少结果的数量,而不是从 AD 获取所有内容。

我做错了什么吗?我用 Google 搜索了几个小时并测试了各种组合,但运气不佳。

最佳答案

好吧,如果

UserPrincipal.FindByIdentity(context, identityType, username) == null

然后没有找到用户,在你的情况下可能是,因为用户没有在 OU 中定义=你在你的上下文中设置为容器。

关于c# - 将 UserPrincipal.FindByIdentity 和 PrincipalContext 与嵌套 OU 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617143/

相关文章:

c# - 更新数据表sql中选定行的列值

powershell - 运行 New-ADUser 后将用户添加到组

authentication - Active Directory 能否使用 MD5 散列密码对用户进行身份验证

c# - 使用 PrincipalContext.ValidateCredentials 对本地计算机进行身份验证时出错?

c# - 如何使用 Principal Context 连接到 Active Directory?

c# - 无法附加到我自己的 Windows 服务应用程序上的进程

c# - 无法隐式转换类型'System.Linq.IQueryable?

c# - 为什么无法通过 PrincipalContext 联系 Active Directory 服务器?

asp.net-core - 如何在.NET Core 2.0中使用PrincipalContext

c# - 以编程方式在 CheckListBox 中设置选中的项目