bugfix> net > 投稿

LdapConnection を使用して特定のDCにバインドしようとすると、奇妙なエラーが発生しましたクラス。私はコードを次のように削除することができました:

static void Main(string[] args)
{
    var cred = new NetworkCredential("username", "password", "domainFQDN");
    try
    {
        var ldapConnection = new LdapConnection(new LdapDirectoryIdentifier("domain1.test.local", 389, false, false), cred, AuthType.Kerberos);
        ldapConnection.Bind();
        Console.WriteLine("Connected 1");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
    try
    {
        var ldapConnection2 = new LdapConnection(new LdapDirectoryIdentifier("dc1.domain1.test.local", 389, true, false), cred, AuthType.Kerberos);
        ldapConnection2.Bind();
        Console.WriteLine("Connected 2");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
    Console.ReadLine();
}

このプログラムの出力は一貫して次のとおりです。

Connected 1
System.DirectoryServices.Protocols.LdapException: A local error occurred.
   at System.DirectoryServices.Protocols.LdapConnection.BindHelper(NetworkCredential newCredential, Boolean needSetCredential)
   at System.DirectoryServices.Protocols.LdapConnection.Bind()

呼び出しの唯一の違いは、最初の接続で LdapDirectoryIdentifier のドメインFQDNを使用することです 、2番目の接続では正確なDCアドレスを使用します。もちろん、最初の接続が2番目の接続と同じDCに接続されることを確認しました。

エラーは AuthType.Kerberos を指定したときにのみ発生します認証方法用。このエラーは、別のフォレストのドメインに接続しようとすると常に発生しますが、ローカルフォレストのDCに接続したときにのみ発生することもあります。

ドメイン名を2回使用することでおそらくエラーを回避できますが、特定のDCへの接続を取得すると、スティッキ性は保証されません。

このエラーが発生することなく、2番目の接続が同じDCに接続されるようにするにはどうすればよいですか?

回答 1 件
  • The error only occurs when I specify AuthType.Kerberos for the authentication method.

    問題は、Kerberos認証です。

    コマンドラインから試してください(FQDNではなく、DCの短い名前を使用してください)。

    setspn dc1
    
    

    そのリストにはたくさんあるはずですが、ここでの問題は「ldap/dc1.domain1.test.local/domain1.test.local」だと思います。リストにそれがありますか?

    そうでない場合は、追加できます。ドメイン管理者として、コマンドラインからこれを使用します。

    setspn -a ldap/dc1.domain1.test.local/domain1.test.local dc1
    
    

    詳細については、この記事で説明されていないSPNがありますが、GUIDがあります。下部のリストは、SPNのリストがどのように見えるかを示しています。https://support.microsoft.com/en-ca/help/308111/a-missing-service-principal-name-may-prevent-domain-controllers -from-r

    そのSPNが既にリストされている場合は、次の手順に従ってKerberosロギングをオンにできます。https://support.microsoft.com/en-ca/help/262177/how-to-enable-kerberos-event-logging

    ロギングを有効にすると、Kerberosイベントがシステムイベントログに表示されます。失敗の理由がわかります。

あなたの答え