如果应用程序服务器位于Active Directory A中,如何查询Active Directory B.

The*_*ost 5 c# asp.net iis ldap active-directory

所以继承我的问题.我有一个带有基于表单的身份验证的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();
Run Code Online (Sandbox Code Playgroud)

这段代码很好用.问题是客户端请求域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();
Run Code Online (Sandbox Code Playgroud)

由于我的服务器在域A中,这不起作用.知道服务器在domainA中,有没有办法让我查询domainB?我发现一篇文章说要为domainA和B设置信任,但这个域名不应该被链接.它仅适用于此应用程序,因此需要此功能.

PS我可能忘了解释一个重要的细节.domainA和B不在同一网络上.但是domainA可以ping通domainB

小智 1

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

de.User = @"DOMAINB\user";
de.Password = "YourPassword";
de.AuthenticationType = AuthenticationTypes.None;
Run Code Online (Sandbox Code Playgroud)

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

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