到目前为止,我一直在使用自定义成员资格提供程序进行身份验证。我即将开始使用MVC开发我的第一个网站。我想知道我是否应该使用ASP .NET MVC附带的内置成员资格提供程序,或者我是否应该创建自己的。我的网站需要与openid,facebook,google等集成以进行身份验证和api访问的openauth。我想知道根据我的需要使用内置的那么容易。
答案 0 :(得分:25)
就我个人而言,讨厌使用核心框架中可用的ASP.NET Membership provider
... 当它持久存在于SQL SERVER数据库时。所有表格和视图对于单个网站来说都是一种过度杀伤力。对于托管公司? ..也许......但是对于我所做过的所有企业网站来说......这是一种过度杀伤和麻烦。至于实际的提供者界面等等......它非常好......但仍然非常硬核等等。对于简单中型网站来说,这是一种过度杀伤力,IMO。
个人而言,我会使用一些简单的自定义代码来处理大多数基本媒体网站的成员资格持久性。
然后转到你的第二个问题:OpenId。使用Andrew Arnott的DotNetOpenAuth .NET framework - >它就是Kicks Serious Ass(tm)。使用它与将用户成员资格数据保存到存储库的方式无关。 IE浏览器。如果您继续使用Sql Server + ASP.NET成员资格提供程序,您仍然可以(并且应该)使用DotNetOpenAuth。如果您有一种简单的自定义方式将用户详细信息保存到数据库(这就是我所做的),您仍然可以使用DotNetOpenAuth - 这两者是相互独立的。
所以,IMO,不要使用过于复杂的ASP.NET Membership + Sql Server的东西,而是使用一两个简单的表来保存自己的用户详细信息。接下来,你必须使用DotNetOpenAuth来处理任何OpenId(StackOverflow使用DotNetOpenAuth来处理他们的OpenId登录)。
祝你好运:)
(我确信我的ASP.NET成员资格提供程序+ Sql Server的操作会保留这些信息会导致一些人产生书呆子,这里)。
答案 1 :(得分:13)
如果你不得不问,你不应该写自己的提供者。做好安全性真的很难。做错了非常容易。
但好消息是,你想要的东西是非常普遍的,并且有经过测试的现成工具已经做到了。一个例子是Janrain。还有其他人。尽可能使用现有的经过验证的工具。
答案 2 :(得分:8)
看看NerdDinner发生了什么。他们最近(6个月前)与OpenID集成,谷歌,雅虎作为特色提供商。他们仍然允许所有“原生”登录。以下是允许用户以不同方式进行身份验证的站点示例。
如果你可以镜像他们的一些功能,你就可以在Facebook,OpenAuth等中滚动。最大的好处是它已经在ASP.NET MVC中实现了,你只需要借一些该实施。
答案 3 :(得分:4)
这是一个选项,也是我成功使用的选项。
您实际上只有一个用户可以通过多种方式进行身份验证。
使用内置的提供程序,您当然可以随时切换,但这并不妨碍您以多种方式对该用户进行身份验证。
当用户使用OpenID,Facebook等进行身份验证时,将该登录名与将特定登录方法和身份与表单标识相匹配的表进行匹配,并将用户设置为使用其规范的成员身份用户名登录。 / p>
如果新用户对您的网站进行身份验证但没有帐户,则只需在会员提供商中自动创建一个帐户。将密码设置为一些随机垃圾,因为他们永远不会使用它。让他们继续将多种登录类型与它相关联。
如果用户想要直接登录,只需使用标准的会员提供商密码重置机制,并为其提供一个。
长话短说:现在使用内置机制。它并不能阻止你做你想做的事。
答案 4 :(得分:1)
最近推出的SimpleMembershipProvider解决了旧的asp.net成员资格的许多问题。即易用性和对User表模式的控制。这应该是任何新应用程序的起点(截至2012年11月)。
请参阅以下链接,了解SimpleMembershipProvider的入门知识以及asp.net会员资格的合理历史。