如何在ASP.NET中允许多种身份验证方法?

Ama*_*ere 27 c# asp.net authentication asp.net-mvc asp.net-membership

我正在构建一个新的ASP.NET MVC应用程序(在C#中),其中一个要求是创建一个新的成员数据库.为此,我们需要角色来管理不同类型的成员和配置文件,以管理附加到每个成员的其他元数据.到目前为止,只需使用标准的MembershipProvider,RoleProvider和ProfileProvider作为.NET Framework的一部分提供.

但是,问题是我想允许不同的身份验证方法.我希望帐户和登录凭据具有一对多的关系(一个帐户可以附加一些登录凭据).例如,用户可能同时将OpenID和ActiveDirectory帐户附加到其帐户.

但是,在尝试了几种方法后,我们选择了MembershipProvider路线(解释了它是如何实现的,如下所示).

我的问题是,人们之前是如何做到这一点的,以及人们如何建议我接近它?它似乎是在很多网站上实现的东西,但在这里的搜索并没有返回任何可靠的东西.

编辑:在隔夜和今天早上四处寻找好几个小时之后 - 我仍然没有意识到屠杀一个会员提供者将是最简单的选择.有多个MembershipProviders会产生相同的效果吗?

BOUNTY EDIT:没有回复,我假设没有更优化的解决方案,我发布的答案.这是真的吗?我正在提供奖励,试着看看是否有人对此有任何进一步的想法以及是否有更好的选择.

BOUNTY ACCEPT EDIT:我认为WIF是下面接受的答案,对于.NET 4版本和其他版本可能适用于3.5.除此之外,也许一个屠宰的MembershipProvider或改编的可能仍然是相关的.

Kla*_*sen 16

在我看来,这样做的"真正方式"是使用WIF联合(Windows Identity Foundation,以前的日内瓦框架).

我们的想法是将身份验证授权分开.该认证是由所谓的STS(安全令牌服务)执行并管理所有你想要支持的可能的登录机制.当用户通过身份验证后,STS会发出包含一组声明和用户身份的令牌.此令牌被发送到网站(在该术语中称为依赖方),并且网站基于令牌中的声明确定用户可访问的站点的哪些部分.WIF提供从令牌中提取信息的成员资格和角色提供程序.

您可以在此处阅读有关创建声明感知网站的信息.

这种方法的优点之一是在身份验证和授权之间分离关注点.您的网站不需要任何复杂的成员资格和角色提供者.此外,STS可以重复使用他们无需注册不止一次来验证用户身份到其他应用程序,你可能有(有效的登录实现单)

缺点是您将不得不花一些时间研究这些概念并编写STS编码.请注意,使用WIF对STS进行编码并不难,但它也不是100%的简单任务.

如果我设法引起你的兴趣,我会建议你从阅读本白皮书开始.

亲切的问候,

克劳斯