使用Windows身份验证的MVC 5自定义逻辑授权

时间:2015-03-12 12:47:10

标签: c# asp.net-mvc-5 authorization rbac abac

我有一个使用Windows身份验证的MVC 5项目。

我使用默认的WindowsTokenRoleProvider作为我的角色提供程序,它适用于以下情况:

[CustomAuthorization(Roles = "DOMAIN\example_group")]
public ActionResult Action()...

效果很好。 当我想使用自定义角色时,问题就出现了,例如:" Approver"。为了检查谁是真正的批准者,我必须查询一个特殊的表并使用自定义逻辑来决定当前的人是否是批准者。

为了做到这一点,我覆盖了AuthorizeCore的{​​{1}},并写了这样的内容:

CustomAuthorize

但是当我添加另一个角色时会发生什么,让我说protected override bool AuthorizeCore(HttpContextBase httpContext) { if(CheckIfCurrentUserIsAnApprover()){ return true; } ........... } ,我将不得不添加:

Managers

如何让它更通用?

1 个答案:

答案 0 :(得分:0)

这是基于属性的访问控制(ABAC)的明确案例。

ABAC使用属性扩展基于角色的访问控制,以便您可以根据用户的批准限制等事项做出决策。

在ABAC中,您可以编写访问控制策略,例如:

  • 如果user.location == object.location,具有role == approver的用户可以对类型为== transaction的对象执行action == view。

用于编写策略的语言是XACML(可扩展访问控制标记语言)。

XACML还定义了一个具有以下概念的架构:

  • 策略执行点:应用程序前面的拦截器
  • 政策决策点:达成决策的引擎

您可以在此处阅读更多内容:http://developers.axiomatics.com/blog/index/entry/xacml-reference-architecture.html。 Axiomatics提供.net引擎和.net pep。