2013-12-20 38 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允許我以最小的配置在區域內實施索賠。本來不錯的是區域特定的資源標識符模板或類似的東西。只是在說' ;) –