首先,我是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用户才能拥有任何特殊权限?任何指针都会非常感激!
答案 0 :(得分:0)
我猜您需要在与AD服务器通信时检查前提条件
(1)您的机器应与您正在通信的域名相同。
(2)您在查询中传递的用户名和密码应该存在于该AD服务器上。
(3)如果您要更新记录,那么您传递给服务器的凭据应具有管理员权限。
请检查一下这些要点。
希望这会对你有所帮助。