1

まず、私は AD / LDAP などに慣れていないので、これは明らかなことかもしれません (そう願っています!)。私の用語が正しくない場合はお詫びします。訂正してください。

BUSINESS (グローバル グループ) とAUTH (ドメイン ローカル グループ) の2 つのドメインがあり、その間に一方向の信頼があります (AUTH は BUSINESS を信頼します)。

のコードは、string LDAPServer = "BUSINESS".

しかし、AUTH ドメインにあるMachineBstring LDAPServer = "AUTH"で実行すると、メッセージ2f が表示されます。手順 2 で返されたユーザーが であるため、ユーザーが見つかりませんNULL。変更string LDAPServer = "BUSINESS"すると、手順 1 でドメイン コントローラーが見つからないという例外がスローされます。

注として、LDAPServiceAccountBUSINESS ユーザーになることができるという事実は、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 ユーザーをセットアップする必要がありますか? どんなポインタでも大歓迎です!

4

1 に答える 1

0

ADサーバーとの通信中に前提条件を確認する必要があると思います

(1) マシンは、通信先と同じドメインにある必要があります。

(2) クエリで渡したユーザー名とパスワードは、その AD サーバーに存在する必要があります。

(3) レコードを更新する場合、サーバーに渡した資格情報には管理者権限が必要です。

これらの点を一度ご確認ください。

これがお役に立てば幸いです。

于 2013-01-11T11:59:09.473 に答える