c# - ActiveDirectoryMembershipProvider 验证用户

标签 c# active-directory ldap activedirectorymembership

我想使用 ActiveDirectoryMembershipProvider 的 ValidateUser 方法来验证用户是否存在于 AD 中。

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

<add name="AspNetActiveDirectoryMembershipProvider" 
     type="System.Web.Security.ActiveDirectoryMembershipProvider" 
     connectionStringName="ADConnection" 
     attributeMapUsername = "userPrincipalName"  />

我只是用帖子的测试替换了实际值..

<add name="ADConnection" connectionString="LDAP://test.test.test.com/dc=test,dc=com" />

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

谢谢, J

最佳答案

使用 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.";

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

更新:看来您应该能够按照此处的这些行轻松实例化多个成员(member)提供程序:

    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);
    }

基本上,您可以通过 Membership.Providers["FabrikamSqlProvider"] 访问它来获取特定的成员资格提供程序,然后对其调用方法,例如 .ValidateUser().

基本的 Membership.ValidateUser 将只使用您定义为默认的成员(member)提供者 - 但它不会阻止您使用其他人!

关于c# - ActiveDirectoryMembershipProvider 验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4712927/

相关文章:

c# - .net core 2.0 mvc + kestrel - 如何将目录锁定到 Controller 操作?

c# - 使用 session ID 将消息添加到 IAsyncCollector 主题输出

active-directory - 过滤器中的 DirectorySearcher 空值比较

php - CakePHP LDAP/MySQL 混合模型

c# - 我的 LINQ 查询仅返回 1 个结果

C# "Semi-Generic"接口(interface)?

active-directory - 将逗号添加到 dsquery 输出

ssl - 尝试使用 TLS 连接到 LDAP 时出错 'LDAP Result Code 201 "ErrorNetwork": Invalid packet format'

go - GO 语言的 ActiveDirectory/LDAP 身份验证客户端包?

ldap - 我可以配置为始终从多值 LDAP 属性中获取第二个 `cn` 值吗?