当用户在不同的域上时,LDAP无法找到用户

时间:2013-01-11 11:32:30

标签: c# active-directory

首先,我是AD / LDAP等的新手,所以这可能是显而易见的(我希望如此?!)并且如果我的术语不对,请道歉,请纠正我。

我们有两个域,业务(作为全球集团)和 AUTH (作为域本地组),它们之间具有单向信任(AUTH信任业务)。

以下代码适用于string LDAPServer = "BUSINESS"时位于BUSINESS域的 MachineA

但是当使用string LDAPServer = "AUTH" MachineB 上运行时,它会显示消息 2f。用户未找到,因为在步骤2中返回的用户是NULL。如果我更改string LDAPServer = "BUSINESS",则在步骤1中抛出一个异常,即无法找到域控制器。

请注意,LDAPServiceAccount可以是商业用户,这表明AUTH可以看到商家。如果我将其更改为LDAPServiceAccount = "BUSINESS\\NotRealName",则步骤1会抛出包含无效凭据的异常。这表明它已解决了BUSINESS域用户对该呼叫进行身份验证的问题?如果我更改LDAPServiceAccount = "AUTH\\ValidAccount",我会得到同样的问题User == NULL,因此 2f。找不到用户

namespace ConsoleApplication1
{
    using System;
    using System.DirectoryServices.AccountManagement;

    class Program
    {
        static void Main(string[] args)
        {
            // Who are we looking for?
            string userName = "BUSINESS\\User.Name";

            // Where are we looking?
            string LDAPServer = "AUTH";
            string LDAPServiceAccount = "BUSINESS\\InternalServiceAccountName";
            string LDAPServiceAccountPassword = "CorrespondingPassword";

            Console.WriteLine("1. Connecting to: " + LDAPServer);
            using (PrincipalContext adPrincipalContext = new PrincipalContext(ContextType.Domain, LDAPServer, LDAPServiceAccount, LDAPServiceAccountPassword))
            {
                Console.WriteLine("2. Finding: " + userName);

                using (UserPrincipal user = UserPrincipal.FindByIdentity(adPrincipalContext, userName))
                {
                    if (user == null)
                    {
                        Console.WriteLine("2f. User Not Found!");
                        Console.ReadKey();
                        return;
                    }

                    Console.WriteLine("3. Getting groups...");

                    using (var groups = user.GetGroups())
                    {
                        Console.WriteLine("4. The groups are:");
                        foreach (Principal group in groups)
                        {
                            Console.WriteLine("\t{0}", group.Name);
                        }
                    }
                }
            }

            Console.WriteLine("END.");
        }
    }
}

我想知道这是两个AD服务器之间的问题,其中AUTH没有使用BUSINESS检查但是检查用户是否存在其配置?我是否需要设置LDAPServiceAccount用户才能拥有任何特殊权限?任何指针都会非常感激!

1 个答案:

答案 0 :(得分:0)

我猜您需要在与AD服务器通信时检查前提条件

(1)您的机器应与您正在通信的域名相同。

(2)您在查询中传递的用户名和密码应该存在于该AD服务器上。

(3)如果您要更新记录,那么您传递给服务器的凭据应具有管理员权限。

请检查一下这些要点。

希望这会对你有所帮助。