【问题标题】:How to query Active Directory B if application server is in Active Directory A如果应用程序服务器在 Active Directory A 中,如何查询 Active Directory B
【发布时间】:2017-03-28 04:05:10
【问题描述】:

所以这是我的问题。我有一个基于表单的身份验证的 Asp.net 应用程序。我的数据库中有用户,但用户也必须在活动目录中。

以下代码用于检查用户是否在域 A 中

            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://domainA.com";
            de.AuthenticationType = AuthenticationTypes.None;
            DirectorySearcher search = new DirectorySearcher(de);
            search.Filter = "(SAMAccountName=" + account + ")";
            search.PropertiesToLoad.Add("displayName");

            SearchResult result = search.FindOne();

此代码工作正常。问题是客户端请求域 B 也应该能够连接到应用程序。于是创建了以下代码:

            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://domainB.com";
            de.AuthenticationType = AuthenticationTypes.None;
            DirectorySearcher search = new DirectorySearcher(de);
            search.Filter = "(SAMAccountName=" + account + ")";
            search.PropertiesToLoad.Add("displayName");

            SearchResult result = search.FindOne();

因为我的服务器在 domainA 中,所以这不起作用。有没有办法让我知道服务器在域A中查询域B?我发现一篇文章说需要为域 A 和 B 设置信任,但不应链接此域。只有这个应用程序才需要这个功能。

附:我可能忘了解释一个重要的细节。域A 和B 不在同一个网络上。但是domainA可以ping domainB

【问题讨论】:

  • 如果不允许域之间的信任,您需要为域 B 中的用户提供凭据到 DirectoryEntry 构造函数或使用模拟。这意味着您必须为域 B 中的用户存储/请求用户名和密码
  • @oldovotes 伤心没用......我收到“服务器无法运行”错误。这是尽可能通用的。知道为什么吗?
  • @oldovets 我可能忘了解释一个重要的细节。域A 和B 不在同一个网络上。但是domainA可以ping domainB
  • 您能否通过 FQDN (domainB.com) ping 域 B?您是否能够通过来自 domainA 的 FQDN ping domainB 中的域控制器?似乎是网络问题,与 DNS 服务器有关。
  • @oldovets Sent 4 收到 2. ping domainB.com 丢失 50%

标签: c# asp.net iis active-directory ldap


【解决方案1】:

在尝试针对外部域进行示例时,我注意到在使用错误的身份验证类型时,外部 DC 会给出错误消息“服务器不可用”。请尝试:

de.User = @"DOMAINB\user";
de.Password = "YourPassword";
de.AuthenticationType = AuthenticationTypes.None;

当然,这会导致不安全的 BASIC 简单绑定,它会删除 ADSI 可能提供的任何加密。如果这可行,您应该尝试服务器接受的更安全的身份验证类型。

另一种方法可能是使用“System.DirectoryServices.Protocols”命名空间,它为 AD 访问提供了一种更轻量级的方法。我可以为您提供一个您想朝这个方向发展的样本。

【讨论】:

    【解决方案2】:

    您需要提供有权在域 B 上查询 AD 的凭据。

    var de = new DirectoryEntry("LDAP://domainB.com", "Username", "Password");
    var search = new DirectorySearcher(de);
    

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多