Asp.net 验证用户身份的最佳方法?

Asp.net 验证用户身份的最佳方法?,asp.net,vb.net,security,session,cookies,Asp.net,Vb.net,Security,Session,Cookies,我意识到这个问题可能是主观的,但我在这方面还是相当新的,虽然在这个问题上有很多。我还没有形成一个好的意见,我想,也许部分原因是因为我是新来的,我只能从我的项目的角度来思考,这并不是什么不寻常的事情 所以我要问的是,在我的环境中,什么是认证的最佳选项?最好的治疗方法是什么?饼干?还有别的吗?另外,如何在表中安全地保存密码?我研究了数据类型,但这似乎有帮助。您是否需要在表格和/或列中执行一些特殊操作?最终,我很想在我的网站{iefacebook,Google,OpenID}中添加其他身份验证方法,但

我意识到这个问题可能是主观的,但我在这方面还是相当新的,虽然在这个问题上有很多。我还没有形成一个好的意见,我想,也许部分原因是因为我是新来的,我只能从我的项目的角度来思考,这并不是什么不寻常的事情

所以我要问的是,在我的环境中,什么是认证的最佳选项?最好的治疗方法是什么?饼干?还有别的吗?另外,如何在表中安全地保存密码?我研究了数据类型,但这似乎有帮助。您是否需要在表格和/或列中执行一些特殊操作?最终,我很想在我的网站{iefacebook,Google,OpenID}中添加其他身份验证方法,但我想我需要先了解这一点

我的环境是ASP.NET,后面的代码是VB。我正在使用MSSQL 2005(但如果需要,可以访问2008)

谢谢
Josh

我对ASP不熟悉,因此我无法回答您如何在整个会话中最好地沟通和保存凭据。正如其他人所建议的那样,使用内置会员制似乎是最安全的方法。然而,我完全同情你自己做事的愿望,并理解他们是如何在幕后工作的。如果您确实想自己解决这个问题,我可以向数据库方面谈谈

如果可能的话,不要将实际密码存储在任何地方。您应该只存储由密码生成的不可逆加密值(使用哈希加密算法,例如)。要对用户进行身份验证,而不是解密存储的密码并比较两个纯文本密码,您需要加密输入的密码,然后比较两个加密值。如果您存储实际密码,即使它是用可逆加密算法加密的,这也是一个很大的安全风险

此外,如果使用允许指定种子值的加密算法,则应使用算法基于原始密码生成种子值。您不希望对每个密码使用相同的加密种子值


此外,大多数加密方法的设计速度都很快,因此可以用于通信流。然而,如果它们很快,这意味着有人可以用蛮力更快地破解它们。因此,使加密更安全的最佳方法是尽可能降低加密速度。这通常是通过在一个循环中重复加密加密值固定次数来实现的。

回答:使用ASP.Net的内置成员系统。(或更新的SimpleMembership)如果您使用的是VS2012,那么这些其他身份验证方法是内置的,因此您可以轻松实现。嗯,你必须取消注释一些行。是的,我查过了。但它似乎太复杂,难以通过编程进行管理。但我认为如果它易于使用,它将是一个很好的工具。如何保存身份验证(cookie/session/somethingelse?)什么是SimpleMembership?如果您不确定要在此处执行什么操作以避免安全问题,请务必使用内置的成员资格系统-在后台,这将使用cookie作为令牌,在请求内容时对用户进行身份验证。若您确实编写了自己的提供者,那个么会话将需要使用cookie进行维护,您不应该将查询字符串参数用作身份验证令牌。在企业环境中,您可能希望使用Active Directory成员资格提供程序。那么,有人能告诉我如何定制内置成员资格系统的要求吗?没错,史蒂文,我想了解所有这些背后的“科学”。更不用说,我觉得内置太麻烦,难以管理。我已经尝试过定制信息和困难。但是,我又是新来的,可能错过了什么。但你是对的。如果出于任何其他原因,我宁愿自己去做,去学习。你给了我很多启发!现在转到ASP部分…希望如此!是的,使用提供的功能,比如说,是很好的,但是我在过去已经被咬了很多次,至少在这样做时要小心。自己写东西可能需要更长的时间,但最终,你完全理解它是如何工作的,所以当出现问题时,你知道如何修复它。此外,你不必写黑客围绕它,使它的工作方式,你希望它的工作。我对这个“会员资格”功能一无所知,但如果它与Redmond推出的任何其他安全相关功能一样,我可以很容易地想象它可能是多么复杂和麻烦。尽管如此,学习这些工具仍然是一个好主意,就像这样,它们在框架中提供,并在有意义的领域明智地使用它们。如果您所需要的只是一个简单的身份验证机制,而没有异常的要求,那么最好使用已有的机制,或者至少将其封装在一个更友好的“护套”界面中。再次感谢Steven。我在周末发现了一篇非常棒的帖子,解释了VB网站的情况有了你对DB和这个网站的解释,我想我已经走上了正轨。谢谢