2010-09-04 156 views
3

我有实现身份验证和授权的通常要求。我曾经使用自定义代码实现它,我拥有用户,角色,角色页面,用户页面和用户角色。因此,我们可以通过这种方式给予某个用户角色(即组多个页面)和/或直接定义对某些页面的访问权限。所有这些都能够指定细粒度的权限,例如在这些页面中添加/编辑/删除记录的功能。ASP.Net身份验证和授权选项

我的问题:使用Forms身份验证实现此功能有多简单,并且实现自定义解决方案有什么优势。我还担心在确保会话劫持和反欺骗攻击者可以重播请求并冒充合法用户方面是否会有任何优势。表单身份验证在那里有任何优势,还是只有SSL可以抵御这一点(这使得两种方法在这方面都是平等的)。

回答

2

Forms身份验证仅仅是从浏览器通过一个认证令牌的机制服务器,作为请求者的身份。我现在正在使用Session变量来记住登录用户的信息?这与表单身份验证类似,因为会话状态通过Cookie进行维护(部分)。同样,表单身份验证会创建一个防篡改标识令牌并使用cookie存储它,以便当用户发出后续请求时,cookie会发送到服务器,该服务器会说“嗨,我是用户X.”正如名称所言,表单身份验证只是一种身份验证机制,即识别访问者。

对于授权,您通常会使用URL授权,这是您在Web.config中指定的一种机制,这些是某些用户(和/或角色)可以访问(或无法访问)的页面。但是,URL授权再次如其名称所暗示的那样,只是授权用户的机制,用于确定给定的请求者是否有权检索某个资源。

那么您如何存储用户信息,如用户名,电子邮件,密码等?这就是会员发挥作用的地方。这是一个用于创建和存储和管理用户帐户的可扩展框架。还有Roles系统,它是一个类似的可扩展模型,用于创建角色并将它们与用户相关联。

这些都是您应该探索的工具和框架:表单身份验证,URL授权,成员资格和角色。它们是互补的技术,并且(通常)是串联使用的。

为了解决您的具体问题:

有多容易实现这一点使用窗体身份验证和这是否给什么优势实现自定义解决方案。

表单认证(以及URL认证和成员资格和角色)很容易实现。使用这些技术有三个主要优势,而不是定制解决方案:

  1. 使用这些技术更有效。你不必重新发明轮子,从而节省你的时间。
  2. 使用这些技术可以减少错误代码。如果您实施自定义解决方案,您可能会遇到安全漏洞或在测试期间无法捕获的错误。自从ASP.NET成立(近十年来)以来,Forms auth和URL授权两者都已出现,并且已被全球数百万开发人员使用并“在现场测试”。成员和角色已经有5-6年的历史,具有相似水平的现场测试。显然,你不能说你的定制解决方案。
  3. 使用这些技术可使您的应用更易于维护。如果您需要聘请新开发人员来帮助您的网站,她很可能已经熟悉auth等表单,但需要花时间来加快定制解决方案。

我也很关心知道是否会有任何优势,当谈到从会话劫持和反欺骗指攻击者可以重放请求,并模仿合法用户保护。表单身份验证在那里有任何优势,还是只有SSL可以抵御这一点(这使得两种方法在这方面都是平等的)。

表单验证具有非常严格的安全性(假定您正在使用默认设置)。身份验证票证已加密并进行了数字签名,并具有内置的基于时间的到期日期(以减少重播攻击的表面积)。我不确定你目前的自定义解决方案使用什么标识,因为你没有提到它,但我会打赌它是会话状态。这将是“安全”。关键是,身份令牌 - 您的案例中的会话cookie以及身份验证中的身份验证票据 - 都是安全的,并且可以在没有SSL的情况下通过Internet安全传输。

不管你使用什么方法,但是,SSL至少要保护登录页面是至关重要的。这是用户输入他的凭证的页面。如果该页面是而不是通过SSL访问,则用户的凭证将通过Internet以纯文本格式发送。

会[成员,角色等]给我分配用户访问直接某些页面,并在通过角色的同时(即组访问定义多页)

URL的能力授权允许您基于用户/角色锁定整个页面。要授予对页面上特定功能的访问权限,您必须编写自己的代码/逻辑。

要学习这些技术,我会无耻地建议您查看my tutorials on website security。在C#和VB中共有15个分步教程,可以下载完整的,经过测试的工作演示代码。它们涵盖了与用户帐户相关的各种场景,从表单验证到URL授权,到基于角色的授权,到创建和管理用户帐户。

这里是再次的网址:http://www.asp.net/security/tutorials

快乐编程!

+0

我已经看过所有这些了,我的问题仍然存在: 1.是否能让我直接并通过角色(该组访问定义到多个页面)直接并指定用户访问某些页面? 2.是否会给我细节控制指定每页上的添加/编辑/删除权限? 3.当涉及到安全性时,我是否认为使用我的定制方法没有多大优势,并且最终唯一真正的安全性是SSL? 这里是一个相关实体: User_Page USER_ID, 网址, can_add, can_edit, can_delete – MSD 2010-09-04 21:11:30

+0

MSD,我更新了我的答案来解决你的问题。 – 2010-09-04 21:36:29

+0

感谢Scott的阐述。 我从资源中看到它的方式,配置哪些人可以访问存储在web.config中的内容,存储在数据库的映射表中的自定义解决方案中,这在表单身份验证和成员资格中也可行吗? 另外,你有没有实现类似于我需要的某种示例或示例(授权页面中的添加/编辑/删除功能)。谢谢 – MSD 2010-09-04 21:44:47