まず、私は AD / LDAP などに慣れていないので、これは明らかなことかもしれません (そう願っています!)。私の用語が正しくない場合はお詫びします。訂正してください。
BUSINESS (グローバル グループ) とAUTH (ドメイン ローカル グループ) の2 つのドメインがあり、その間に一方向の信頼があります (AUTH は BUSINESS を信頼します)。
次のコードは、string LDAPServer = "BUSINESS"
.
しかし、AUTH ドメインにあるMachineBstring LDAPServer = "AUTH"
で実行すると、メッセージ2f が表示されます。手順 2 で返されたユーザーが であるため、ユーザーが見つかりませんNULL
。変更string LDAPServer = "BUSINESS"
すると、手順 1 でドメイン コントローラーが見つからないという例外がスローされます。
注として、LDAPServiceAccount
BUSINESS ユーザーになることができるという事実は、AUTH が BUSINESS を表示できることを示しています。これを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.");
}
}
}
これは、AUTH が BUSINESS をチェックするのではなく、その構成にユーザーが存在するかどうかをチェックする 2 つの AD サーバー間の問題なのだろうか? 特別な権限を持つように LDAPServiceAccount ユーザーをセットアップする必要がありますか? どんなポインタでも大歓迎です!