3

.NET で LDAP を使用して簡単な認証システムを作成しようとしています。私は .NET でいくつかの名前空間をチェックしていましたが、以下のように標準のコード スニペットを作成するだけです。

DirectoryEntry de = new DirectoryEntry(path,username,password);

DirectorySearcher s = new DirectorySearcher(de);
s.Filter = "(&(cn=" + username2 + "))";

SearchResult result = s.FindOne();
if (result != null) {
    Console.WriteLine("User exists");
} else {
    Console.WriteLine("User does not exist");
}

クライアント アプリケーションの認証に使用する管理者のユーザー名とパスワードがusernameあります。password2 番目のユーザー名とパスワードがusername2ありpassword2、ログインするには LDAP で確認する必要があります。

usernameは管理者アカウントでありusername2、LDAP の単なるユーザーです。username2では、どうすればのパスワードを確認できますか?

4

2 に答える 2

2

少し逆の (そして不格好な) 方法は、ユーザーとしてログインして何かを取得しようとし、例外を無効なパスワードとして扱うことです。

static bool CheckUser(string userName, string password) 
{
    var adSettings = ConfigurationManager.ConnectionStrings["ActiveDirectory"];
    if (adSettings == null ||
        string.IsNullOrWhiteSpace(adSettings.ConnectionString))
    {
        return false;
    }

    try
    {
        using (var de = new DirectoryEntry(adSettings.ConnectionString, userName, password))
        {
            // This should throw an exception if the password is wrong
            object nativeObject = de.NativeObject;
        }
    }
    catch (DirectoryServicesCOMException)
    {
        // Wrong password
        return false;
    }
    catch (System.Runtime.InteropServices.COMException)
    {
        // Can't connect
        return false;
    }

    return true;
}
于 2013-01-16T15:36:31.827 に答える
0

私はあなたを助けるかもしれないVBに何かを持っています。私の同僚と数日前にこれに取り組んでいました。教えてください --- コード:

    Dim cookie As HttpCookie = New HttpCookie("username")
    cookie.Value = TextBox1.Text
    cookie.Expires = DateAndTime.Now.AddHours(12)
    Response.Cookies.Add(cookie)
    Dim entry As New DirectoryEntry("LDAP://xyz.com/dc=xyz,dc=com", TextBox1.Text, TextBox2.Text)
    Try
        Dim obj As New Object
        obj = entry.NativeObject
        Dim search As New DirectorySearcher(entry)
        search.Filter = "(SAMAccountName=" + TextBox1.Text + ")"
        search.PropertiesToLoad.Add("cn")
        Dim result As SearchResult
        result = search.FindOne()
        If result.Equals(Nothing) then
            MsgBox("Try Again with valid username")
        Else
            MsgBox("User Found!")
        Response.Redirect("~/Dashboard.aspx")
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

End Sub
于 2013-01-16T20:30:18.320 に答える