【问题标题】:Unable to extract information无法提取信息
【发布时间】:2013-08-17 12:19:25
【问题描述】:

我正在尝试查询域以确定是否:

  1. 用户是有效用户(并且密码正确)
  2. 用户已启用
  3. 用户属于组 x

我的开发机器不属于这个域。 我想通过我的应用程序指定用户名和密码

我正在使用 System.DirectoryServices.AccountManagement 命名空间,因为这似乎是最有效的方法,但是我一直在努力从我的域控制器中获取最基本的信息。

我可以通过其他工具探索 LDAP。

第一个测试是收集用户信息,下面的代码对用户返回null。 然而,用户是有效的。

我做错了什么?

    // set up domain context
 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "server","CN=Users,DC=doom,DC=home", "ldapuser","password");

  // get user contect
 UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.Name, username);

 //is user locked?
 var locked = user.Enabled;

更新:

如下定义了绑定方法,我现在收到错误 “无法检索有关域的信息 (1355)。”

var ctx = new PrincipalContext(ContextType.Domain, "server", "DC=doom,DC=home", ContextOptions.SimpleBind, "ldapuser", "password");

【问题讨论】:

标签: c# active-directory directoryservices


【解决方案1】:

已排序。

此答案解决了我在尝试连接到我不是其成员的域控制器时遇到的两个问题。

这篇文章给了我最终的答案: http://elegantcode.com/2009/03/21/one-scenario-where-the-systemdirectoryservices-accountmanagement-api-falls-down/

  1. 您需要在上下文中定义绑定(即 ContextOptions.SimpleBind)
  2. 您必须在网络适配器 DNS 设置中将域服务器设置为要使用的第一个 DNS 服务器。

我现在可以连接到我的 AD 并收集数据。

【讨论】:

  • 非常适合我!定义绑定的完整语法是 var context = new PrincipalContext(ContextType.Domain, "DOMAIN_NAME", "DC=companyname,DC=com", ContextOptions.SimpleBind, "User1", "password123");。
猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多