【问题标题】:Is ASP.NET role based security a true role based access control system?ASP.NET 基于角色的安全性是真正的基于角色的访问控制系统吗?
【发布时间】:2011-04-26 15:14:51
【问题描述】:

根据我从this paper 那里读到的内容 我了解基于角色的访问控制系统是一种用户可以分配到角色指定权限以对对象执行操作的系统 但是在asp.net中我们没有指定“对对象的操作”,我的意思是我们如何指定“角色R中的所有用户都可以对对象O执行删除” ASP.Net 中的对象部分在哪里

【问题讨论】:

    标签: asp.net asp.net-mvc rbac role-based


    【解决方案1】:

    asp.net 的安全模型非常有限。本质上,您只能在角色级别进行控制。这意味着对于任何操作,您都必须测试以查看用户是否是您希望允许执行该操作的任何角色。

    我们采取了定义我们自己的模型的路径,该模型提供了更多的粒度。基本上,我们定义操作并将这些操作分配给各种角色。通过这种方式,我们可以测试他们是否具有“删除帐户”权限,而不是测试他们是否处于“管理员”、“帐户管理员”或任何数量的其他角色。它与 Active Directory 的工作方式非常相似。此外,它允许我们根据需要重新配置角色。

    有一个名为 Authorization Manager (AzMan) 的组件随 Windows 一起提供。它可以与您的会员提供商一起提供操作级别控制。有些人在这方面取得了成功,但其他人则抱怨很难开始工作。大约 5 年前,我们在一个项目中使用了它,当时它大约 95% 的时间都在工作。其他 5% 与我们的 AD 控制器存在通信问题。

    这让我们想到了您的问题:内置的 ASP.Net 会员提供程序是真正的基于角色的访问控制系统吗?不。它允许您定义角色,而不是操作。

    【讨论】:

    • 阿兹曼+1。我们已经使用了几年,非常方便。我们遇到的唯一问题是 AzMan 专门开设了一个 xml 商店。但是最新版本支持 SQL Server 作为存储选项,这非常棒。 (我们不能使用 ADAM 有几个原因。)
    • 您的回答有一些很好的建议,但是当您说 ASP.Net 基于角色的安全性是一个 RBAC 系统时,我不同意。它不支持为您的应用定义操作或将操作映射到角色。它只允许您分配角色和测试角色成员资格。剩下的就留给开发者去创造了。
    • @Brian Cauthon:你是对的。我仔细研究了 RBAC 的真正定义,并相应地更新了我的答案。
    • @taher:我不知道你为什么需要 azman 开源。至少从 2003 年开始,它就成为 Windows 的一部分:support.microsoft.com/kb/324470
    • @chris..我正在构建一个 Web 应用程序,我想在其中实现基于角色的安全性...因为 asp.net 的角色系统不完整,我想推出我自己的 RBAC 系统
    【解决方案2】:

    如果您需要更细粒度的东西,请查看 rhino 安全性。

    【讨论】:

      【解决方案3】:

      如前一篇文章中所建议的,要获得更多粒度,您需要在现有的 ASP.net 成员资格和角色提供者的基础上进行构建。 http://www.visualaccesscontrol.com 等第三方控件也提供基于角色的模块访问安全性和数据访问安全性。使用可视访问控制,您可以将管理功能添加到您的 ASP.net Web 应用程序,以动态地将用户限制为允许他们执行的活动以及允许他们根据各自角色查看的数据子集。

      【讨论】:

        【解决方案4】:

        您正在执行删除操作,因此您需要检查登录的用户是否有权删除该对象。例如,您可以创建一个角色“CanDeleteOs”。然后,您的代码将如下所示:

        if ( !Roles.IsUserInRole("CanDeleteOs") )
            throw new Exception("User does not have permission to delete O's.");
        

        【讨论】:

        • 角色不是权限/操作,不应这样使用。
        • 那是什么?如果不是作为权限,应该如何使用角色?应该使用什么来代替权限?
        • 在这种情况下,角色类似于组(如果您认为用户和组)。权限是不包含在 .NET 安全性(身份验证和授权)中的一级附加细节。真正的 RBAC 框架明确区分了用户、角色和操作/权限。你可以使用 AzMan、visual-guard、asp.net 权限管理器之类的东西,或者自己动手做。
        • 知道了。不确定这本身是否值得投反对票,但我仍然感谢您的澄清。感谢您的跟进。
        • 既然这些 cmets 中有上下文,我会删除反对票,但它不会让我这样做。我投反对票的主要原因是您的回答是在宣传不良做法,并可能导致外行误入歧途。没问题。
        猜你喜欢
        • 1970-01-01
        • 2012-03-18
        • 2010-09-11
        • 1970-01-01
        • 2011-10-12
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        相关资源
        最近更新 更多