表单身份验证

时间:2009-03-13 13:56:23

标签: c# .net asp.net authentication

我已经编程了很长时间了,但我不是世界上最有经验的.Net开发人员。我最近选择了一个为他们的网站使用Forms身份验证的项目。我首先看了.Net 1.1中的表单身份验证,当时它有一些限制,这使我决定不将它用作我的主要身份验证形式。

此项目要求用户具有角色(我理解表单身份验证支持)和组成员身份。例如,“用户A”是“公司A”的“管理员”。表单身份验证现在是否支持这种用户结构?

我还读过表单身份验证以纯文本形式发送密码。此客户端不使用SSL。这是真的吗?

当前代码库使用表单身份验证,但不支持组(它支持角色)。因此,我需要修改表单身份验证以支持所需的组或删除表单身份验证并使用我通常使用的身份验证框架。如果表单身份验证确实支持组并且足够安全,那么我应该坚持这一点。如果表单身份验证存在安全问题或不支持组,那么我需要删除该形式的身份验证。

我在互联网上搜索了一篇有利有弊的文章,但没有运气。你们觉得怎么样?

7 个答案:

答案 0 :(得分:5)

为了满足您的要求,您将使用Membership的表单身份验证。如果您的应用程序使用的是SQL Server数据库,则可以使用SQLMembershipProvider作为成员资格提供程序来实现此目的。

Examining ASP.NET 2.0's Membership, Roles, and Profile可以作为一个很好的开始参考。

关于在连接不受保护时以纯文本形式发送密码的问题。

实际上,发送的密码通常是经过哈希处理的(算法将取决于所选的成员资格提供程序),并且最终存储的密码也是如此。 当然,如果连接不安全,可以检索散列密码并用于破解应用程序,但至少可以消除普通用户密码被盗和使用的可能性,例如访问其他服务(如您所知,许多人在多个服务中使用相同的密码)。所以为了安全起见,你真的需要在这里使用https。

作为一个警告,我远远不是该领域的专家,但最近我遇到了一个类似的问题,你正在描述,所以我可能会发现其中一些有用。

答案 1 :(得分:1)

表单身份验证不会将密码作为纯文本发回。只要您确保login / pwd在接收时受到保护(即使用https ... ssl),就不存在安全风险。

如果您确实需要以这种方式进行授权,您可以依靠表单身份验证进行身份验证,并使用您自己的机制进行授权。

答案 2 :(得分:1)

Forms Auth是您所追求的最佳选择。它支持角色,但不支持组。但是,它确实内置了对活动目录集成的支持,如有必要,可以使用它来缓解组问题。就个人而言,我会坚持你所拥有的,并了解更多。如果您想使用Forms Auth的Forms模式而不是AD auth模式,我会考虑使用现有的表单auth数据库构建组支持。

我强烈建议您查看Microsoft提供的有关表单身份验证的these视频。你会发现它非常直接使用。当然,这不是你可以放在一起的东西,因为它是一个相当强大和灵活的框架。您需要阅读并查看这些视频。但是,当您熟悉它时,您会发现它是安全的,受支持的并且被开发社区很好地接受。

Yikes,我刚刚再次审核了您的问题,并且您说他们不使用SSL。这个网站需要多安全?对我来说,这将是我的第一个业务目标是转向SSL!

答案 3 :(得分:1)

表单身份验证本身不支持组。我们所做的是用它来“验证”用户(证明他们是谁),然后我们使用自己的数据存储来“授权”用户(描述他们可以做什么)。

答案 4 :(得分:0)

数据库没有存储它使用md5的普通密码文本或其他一些哈希方法...我知道它们相互匹配2个哈希字符串,以便他们转换字符串客户端或服务器端我不确定..可能是浏览器...如果你正在考虑使用ssl我不认为你应该使用ASP.net表格认证...它的时间让你做自己的形式为基础的auth并潜入一些广告采矿.. ..

答案 5 :(得分:0)

感谢所有的输入。虽然我认为我将继续在其他项目中使用我自己的身份验证库,但我认为为这个客户端做的最好的事情就是坚持他们已经部分到位的表单身份验证。

虽然我使用Visual Studio和.Net平台开发,但我并不总是喜欢以“微软”的方式做事。我发现很多时候,“微软”方式会引入很多开销,如果你知道自己在做什么就可以避免。

再次感谢您的投入。

答案 6 :(得分:0)

如果您不使用SSL,则密码必须通过网络传递明文。因此需要SSL。

.Net Forms身份验证将正确地散列并将密码存储到数据库,但这不会通过网络保护凭据。但这适用于所有Web框架。

至于这部分内容,你必须在你的应用中实现这一点,或找一些图书馆来帮助你。