针对AD的混合模式身份验证,如果它与成员资格提供程序失败,则回退到数据库

时间:2010-07-12 20:35:35

标签: asp.net authentication asp.net-membership forms-authentication mixed-mode

我的用户将对Active Directory或数据库使用表单身份验证。那里没有Windows集成认证!!

我想要的是当用户提交身份验证表单时,它会尝试针对Active Directory验证用户,如果失败,请尝试使用数据库。

我该怎么做?我想到的是建立一个自定义成员资格提供程序,它将封装逻辑,但我不知道如何开始。

有没有更好的主意?

2 个答案:

答案 0 :(得分:4)

您将能够实现此目的的唯一方式是创建自定义提供程序。

在一个完美的世界中,您可以简单地创建一个Facade提供程序,然后根据需要利用适当的提供程序SQL或AD来验证并返回MembershipUser到您认为必要的任何完整程度。

在现实世界中,这仍然是可能的,但你需要跳过几个环节:

  • 创建您的Facade提供程序并将其优先放在providers元素的membership子元素中,并将其设置为membership元素中的defaultProvider
  • 正确配置SqlMembershipProviderActiveDirectoryMembershipProvider并将放置在外观之后。
  • 从您的外观
  • ,从静态Membership.Providers集合访问配置的提供程序,以根据需要执行这些功能。

如果您需要使用角色并且适用时,您可能会发现需要重复此模式,实现将会更复杂,并且超出了本文的范围。

或者,可以找到SQL提供程序的完整源代码here,这是实现工业级自定义提供程序的一个很好的起点和指导。

我建议在尝试从头开始实施自定义安全功能之前,首先探索阻力最小(并且最少劳动和头痛)的路径并加入外观。

祝你好运。

答案 1 :(得分:0)

正如您所说,您最好创建一个自定义成员资格提供程序来处理这种情况。

MSDN很好地概述了创建自定义成员资格提供程序here和一个很棒的example of an ODBC membership provider

它应该给你一个良好的开端。