给定一组特定的权限,例如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