ActiveDirectoryMembershipProvider用于验证用户

Joh*_*ohn 1 c# ldap active-directory activedirectorymembership

我想使用ValidateUserActiveDirectoryMembershipProvider 的方法来验证用户是否存在于AD中.

我在表单中输入用户名和密码.我想然后实例化提供程序并调用ValidateUser

<add name="AspNetActiveDirectoryMembershipProvider" 
     type="System.Web.Security.ActiveDirectoryMembershipProvider" 
     connectionStringName="ADConnection" 
     attributeMapUsername = "userPrincipalName"  />
Run Code Online (Sandbox Code Playgroud)

我只是用帖子的测试替换真值.

<add name="ADConnection" connectionString="LDAP://test.test.test.com/dc=test,dc=com" />
Run Code Online (Sandbox Code Playgroud)

为了做我想做的事情,我是否需要向提供商提供用户名和密码,以便它可以首先连接,即系统帐户..一旦建立,我可以检查我想要验证的用户?

谢谢,J

mar*_*c_s 10

使用ASP.NET成员资格系统,重点是您不需要实例化提供程序类或任何东西 - 您定义的那个在Membership静态实例下立即可用.

因此,在您的情况下,只需确保配置正确,然后执行以下操作:

 if (Membership.ValidateUser(UsernameTextbox.Text, PasswordTextbox.Text))
     FormsAuthentication.RedirectFromLoginPage(UsernameTextbox.Text, NotPublicCheckBox.Checked);
 else
     Msg.Text = "Login failed. Please check your user name and password and try again.";
Run Code Online (Sandbox Code Playgroud)

Membership将是您定义的必要类 - 只需调用静态方法并完成它!:-)

更新:您似乎应该可以在这些行中轻松实例化多个成员资格提供程序:

    if (e.UserName.IndexOf("@contoso.com") >= 0)
    {
        e.Authenticated = Membership.Providers["ContosoSqlProvider"].ValidateUser(e.UserName, e.Password);
    }
    else if (e.UserName.IndexOf("@fabrikam.com") >= 0)
    {
        e.Authenticated = Membership.Providers["FabrikamSqlProvider"].ValidateUser(e.UserName, e.Password);
    }
    else
    {
        e.Authenticated = Membership.Provider.ValidateUser(e.UserName, e.Password);
    }
Run Code Online (Sandbox Code Playgroud)

所以基本上,你可以通过访问它来获得特定的成员资格提供者Membership.Providers["FabrikamSqlProvider"],然后在其上调用方法,比如.ValidateUser().

基本Membership.ValidateUser将只使用您定义为默认的成员资格提供程序 - 但它不会阻止您使用其他人!