【问题标题】:How to handle authorization in an application?如何处理应用程序中的授权?
【发布时间】:2011-06-24 05:56:10
【问题描述】:

我已经完成了 ASP.NET 3.5 Web 应用程序的身份验证部分。我想了解更多常见的授权模式。

我可以介绍一下我目前的授权结构吗:

我有一个包含“模块”和“操作”表的数据库。 模块代表应用程序中的系统,操作代表可以在系统中执行的操作。

Customer、Order、Billing 将被定义为一个模块。 “操作”与模块相关:Customer.Add、Customer.Delete 将是客户操作。

每个用户都有一个角色,该角色可以访问某些操作,具体取决于他们的角色。

请注意,页面菜单是根据用户的访问权限生成的,用户不会看到他们无权访问的模块和操作。


我的问题从如何在这里实现授权方案开始,可能使用现有的模式或技术。

我应该如何以及何时保护模块,并检查用户对所述模块执行操作的授权?

我还没有实现这个,但这是我想到的一种方法:

  1. 用户点击操作:模块:客户 |操作:添加
  2. 在单击事件中,我查看用户的角色,验证用户是否可以执行操作,然后触发操作或相应地引导用户。


请原谅这个问题的晦涩性质。我不知道在这里问什么。

我希望了解人们如何处理授权,以及人们如何允许/禁止访问业务方法。我不确定声明式安全是否是我需要的,或者我上面提供的简单示例是否是可行的方法。

这里有很多选择,而且可能性似乎无穷无尽。请让我知道是否有任何模型或模式可以在应用程序内处理授权。

【问题讨论】:

  • 我认为标准的 asp.net 系统可能是一个很好的起点——membershipprovider、rolesprovider 等。它们有一个相当通用的标准模式,这将是一个很好的起点。 4guysfromrolla.com/articles/120705-1.aspx

标签: c# asp.net security authorization


【解决方案1】:

我知道我的回答是后来者,但我只想指出,在您有动态访问控制需求的场景中,例如您描述的具有多个属性/参数的场景,您需要考虑属性-基于访问控制 (ABAC) 和实现 ABAC 的可扩展访问控制标记语言 (XACML)。

您可以在这些参考网站上阅读更多信息:

使用 XACML,您可以定义以下策略:

  • 客户可以支付他们自己的账单
  • 客户可以查看分配给他们的账单以及分配给他们负责的人(例如孩子)的账单
  • 客户代表可以管理其所在地区的账单
  • ...

【讨论】:

    【解决方案2】:

    你看过Microsoft-s AzMan-Authorization Manager 吗?

    它包含一个 API 用于编程以询问操作 和一个 gui (azman.msc),您可以在其中定义角色和映射权限并将它们存储在 xml 文件中。

    因此,您可以定义一个 AzMan 操作“CustomerAdd”,而不是在您的方法中定义模块+操作(“客户”加“添加”)。

    【讨论】:

      【解决方案3】:

      如果你想要这样,那就从小处着手。

      首先实现具有重载的public bool User.HasRightsFor(Module m, Action a) 的功能。它甚至可以是静态的,因为您可以从系统中获取当前用户。

      然后,您可以简单地询问用户是否有权执行当前操作/模块/任何内容并采取相应行动。

      这和你现在想的很相似,不同的是我不会先看角色再决定,而是直接返回结果。以后可以解决内部问题,系统更容易修改。

      您可以轻松地将此类系统与(例如)ASP.NET Role-Based Authorization 集成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        相关资源
        最近更新 更多