2014-04-03 134 views
12

給定一組特定的權限,例如EditPage,CreateProject,ModifyUser,我目前正在尋找兩種不同的方法來創建一些自定義聲明類型來模擬此行爲。我可以在網上找到很少的信息,告訴你如何做到這一點,並希望得到一些關於你如何在自己的系統中做到這一點的反饋。創建自定義聲明類型的最佳做法

我考慮的第一個方法是使用一個「行動」,根據權利要求型,具有由權利要求的值所指定的特定操作:

var claims = new [] 
{ 
    new Claim("http://schemas.company.com/claims/project/action", "EditPage"), 
    new Claim("http://schemas.company.com/claims/project/action", "CreateProject"), 
    new Claim("http://schemas.company.com/claims/project/action", "ModifyUser") 
} 

第二種方法是使用權利要求類型本身要定義正在執行的操作,則不使用該值。這就像一種「PossessProperty」安全風格,只要用戶擁有索賠類型,他們就可以執行該操作。

var claims = new [] 
{ 
    new Claim("http://schemas.company.com/claims/project/editpage", ""), 
    new Claim("http://schemas.company.com/claims/project/createproject", ""), 
    new Claim("http://schemas.company.com/claims/project/modifyuser", "") 
} 

還要注意,在聲明類型以上我已經包含了「工程」的鑑別,這樣我可以誰就能在A計劃編輯頁面而不是項目B.

用戶區分我們還計劃將所有這些自定義聲明存儲在中央「授權」數據庫中,因此需要唯一性。

任何想法或反饋將不勝感激。

回答

9

嗯 - 你沒有提供關於你意圖的更多細節 - 但是如果你打算讓這些聲明成爲用戶身份的一部分 - 這顯然是一種反模式。

聲明描述了用戶的身份(可能包括角色等粗粒度授權數據)。爲了製作更細粒度的授權決策,請使用.NET中的ClaimsAuthorizationManager。

在這個擴展點,你根據

一個明智的決定

一)用戶 B中的資源的用戶試圖訪問 C)的用戶嘗試在做的工作)的身份資源

換句話說 - 索賠是您的授權決定的輸入,而不是直接的答案。

+0

謝謝,我希望你會對此作出迴應。我非常喜歡你的Pluralsight視頻。我實際上使用ClaimsAuthorizationManager,但尚未開始實施這些策略。要求具有非常好的安全性,因此用戶被授予執行特定操作的特定權限,例如,上傳圖片,修改頁面等。我認爲特定的權利/行爲/權限將被建模爲個人聲明。但是你說這是一種反模式。那麼這整個細粒度的安全性是否是一種反模式?我現在更加困惑。 – mikesigs

+1

根本沒有;)只是不要使所有這些聲明的ClaimPrincipal的一部分。 – leastprivilege

+0

因此,「行動」索賠不再是索賠。在聲明轉換期間,它們不會與ClaimsPrincipal一起存儲。但相反,授權管理器將不得不通過一些服務調用/ db查找來檢查特定的權限?我希望有一組靜態的策略,但這不適用於此模型。 – mikesigs

相關問題