2013-12-20 37 views
2

我正在尝试创建一个ClaimsAuthorizationManager实现,这看起来非常简单。但是,由于我的MVC应用程序使用区域,因此AuthorizationContext对象的资源属性(作为CheckAccess方法的参数接收)未提供有关我的资源的足够信息。在声明authroization中包括区域名称资源标识符

我正在寻找某种方式来指示在控制器或区域级别的资源描述,而无需修饰每个操作方法。我试图向控制器添加[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "MyResourceName")],但由于缺少Operation值,导致出现异常。我希望实现分层级联设置。例如,所有的ActionMethods都会使用属性中定义的资源,并使用默认的操作标识机制。

有没有我在这里失踪的东西?是否有框架或Thinktecture.IdentityModel助手实用程序来完成此?有没有机会注册一个自定义的AuthorizationContent生成器类?

谢谢!

回答

1

内置机制对于执行这些检查有点低级(因为它基于CAS)。您应该查看Thinktecture IdentityModel帮助器库以了解这些内容。我们提供了一个更简单的机制/ API做基于声明的检查:

http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/

+0

感谢您的答复,布洛克。我在最初的研究中确实找到了这篇文章。我也拉了Thinktecture.IdentityModel 3.6.1。并将ClaimsAuthorizeAttribute注册为全局过滤器。但是,从我所知道的情况来看,这并不包含有关索赔中该区域的任何信息。是否建议定义方法级'ClaimAuthorize'装饰品?有什么方法可以覆盖'AuthorizationContext'的'Resource'值吗? –

+0

检查我是否可以修饰控制器,然后根据需要为操作方法添加更多细化的授权属性。 ClaimsAuthorizationManager.CheckAccess对于每个ClaimsAuthroize实例似乎都被调用一次:在这种情况下,全局过滤器,控制器和操作。它看起来似乎Thinktecture.IdentityModel允许我以最小的配置在区域内实施索赔。本来不错的是区域特定的资源标识符模板或类似的东西。只是在说' ;) –