給定一組特定的權限,例如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.
用戶區分我們還計劃將所有這些自定義聲明存儲在中央「授權」數據庫中,因此需要唯一性。
任何想法或反饋將不勝感激。
謝謝,我希望你會對此作出迴應。我非常喜歡你的Pluralsight視頻。我實際上使用ClaimsAuthorizationManager,但尚未開始實施這些策略。要求具有非常好的安全性,因此用戶被授予執行特定操作的特定權限,例如,上傳圖片,修改頁面等。我認爲特定的權利/行爲/權限將被建模爲個人聲明。但是你說這是一種反模式。那麼這整個細粒度的安全性是否是一種反模式?我現在更加困惑。 – mikesigs
根本沒有;)只是不要使所有這些聲明的ClaimPrincipal的一部分。 – leastprivilege
因此,「行動」索賠不再是索賠。在聲明轉換期間,它們不會與ClaimsPrincipal一起存儲。但相反,授權管理器將不得不通過一些服務調用/ db查找來檢查特定的權限?我希望有一組靜態的策略,但這不適用於此模型。 – mikesigs