1

次のように、DirectoryEntry/DirectorySearcher を使用して LDAP クエリを実行し、C# Web アプリを介して Active Directory でユーザーを認証しています (ConnectionString プロパティは LDAP://server.domain と同等です)。

internal bool AuthenticateUser(string username, string password)
{
    if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
        return false;

    var entry = new DirectoryEntry(this.ConnectionString, username, password);
    var searcher = new DirectorySearcher { SearchRoot = entry, Filter = "(objectclass=user)" };

    try
    {
        var result = searcher.FindOne();
        return true; //connection to AD succeeded, authentication was successful
    }
    catch (DirectoryServicesCOMException)
    {
        return false; //impersonating the user failed
    }
}

これらのクエリはすべて SBS サーバーにヒットし、新しいユーザーを作成すると、Windows 2000 以前 (つまり NetBIOS) の名前に大文字の値を使用しているように見えます。そのため、「Test User」という新しいユーザーを追加すると、ユーザー名は「tuser」になりますが、指定された NetBIOS 名は「TUser」になります。ユーザーがこのメソッドにヒットするユーザー/パスを入力すると、「tuser」は認証に失敗しますが、「TUser」は成功します。

私の質問は、ユーザー名で大文字と小文字を区別する必要がないように、これを変更できるかどうかです。

4

2 に答える 2

1

スキーマの属性定義は、定義されている属性の属性値で使用できる文字を定義します。マッチング ルール (スキーマの属性定義にもある) は、属性値が等しいかどうか、部分文字列、順序付けなどについてどのように比較されるかを決定します。一致ルールは、属性の比較の「大文字と小文字の区別」(実際にはそれほど単純ではありませんが) を決定します。

属性値を比較する場合、サーバー (およびクライアント) は一致規則を使用する必要があります。

于 2012-12-12T17:44:27.540 に答える