【问题标题】:Including Area name in claims authroization Resource identifier在声明授权资源标识符中包括区域名称
【发布时间】:2013-12-21 23:55:10
【问题描述】:

我正在尝试创建一个看起来很简单的ClaimsAuthorizationManager 实现。但是,由于我的 MVC 应用程序使用了区域,AuthorizationContext 对象的 Resource 属性(作为CheckAccess 方法的参数接收)没有提供有关我的资源的足够信息。

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

我在这里缺少什么吗?是否有框架或 Thinktecture.IdentityModel 辅助实用程序来完成此任务?是否有机会注册自定义 AuthorizationContent 生成器类?

谢谢!

【问题讨论】:

    标签: asp.net-mvc wif


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复,布洛克。我在最初的研究中确实找到了那个帖子。我还引入了 Thinktecture.IdentityModel 3.6.1。并将 ClaimsAuthorizeAttribute 注册为全局过滤器。然而,据我所知,这不包括索赔中有关该地区的任何信息。是否建议定义方法级ClaimAuthorize 装饰?有没有办法覆盖AuthorizationContextResource 值?
    • 检查一下,我看到您可以装饰控制器,然后根据需要为操作方法添加更精细的授权属性。 ClaimsAuthorizationManager.CheckAccess 似乎确实为每个ClaimsAuthroize 实例调用一次:在这种情况下,全局过滤器、控制器和操作。看来 Thinktecture.IdentityModel 允许我在配置最少的区域内实现声明。一个区域特定的资源标识符模板或类似的东西会很好。只是说';)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多