自定义角色身份验证

时间:2017-04-01 08:27:55

标签: asp.net-mvc-4 authentication authorization roles

我在asp.net mvc 4应用程序中实现角色和权限的要求非常复杂。我知道ASP.NET身份验证,但这不符合我的要求。

我的应用程序中有15-20个控制器具有各自的视图,一些视图具有部分视图,这些视图在Jquery代码中处理并从那里加载。

现在我有以下要求:

1)某些控制器只能访问一些特定的角色。 1)控制器中的某些视图只能由特定角色访问。 2)在网格视图中,只有一些列和操作(如编辑/创建/删除)只能访问特定角色。

我正在考虑基于角色对控制器,操作和视图进行检查,但是当我将来拥有多个角色和自定义角色时,这会导致问题。什么是实施这种解决方案的最佳方式。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

每次你有"复杂"授权要求,这是一个非常好的迹象表明"以身份为中心"访问控制是不够的。什么是以身份为中心的?仅依赖于用户指标(身份,角色,组)的授权。

此外,在您的问题中,您列出了一个事实,即您不知道未来会怎样。您不知道需要实现哪些其他自定义角色。

所有这些意味着您需要使用基于属性的访问控制()扩展现有的RBAC实现。 ABAC为您提供了RBAC中没有的3个有趣元素:

  1. 政策语言。您可以使用此政策语言()表达复杂的授权质询。特别是,如果用户部门==记录部门,您可以表达 Permit等内容。
  2. 架构:架构识别具有特定职责的关键组件。例如,您有一个策略决策点(PDP),它可以产生授权决策。您有一个策略执行点(PEP),它位于应用程序的前面或内部。 PEP保护应用程序。
  3. PEP和PDP之间的请求/响应方案。标准格式为是/否问题,如下图所示。 JSON可用于对请求进行编码。
  4. 从您的角度来看,您有两种选择。之一:

    1. 实施基于声明的授权。这可以在.NET中使用OOTB
    2. 带来XACML。我不确定.NET是否有任何本机库,但有SDK there
    3. ABAC / XACML Architecture - Axiomatics