Permissions 创建自定义索赔类型的最佳实践

Permissions 创建自定义索赔类型的最佳实践,permissions,wif,claims-based-identity,claims,Permissions,Wif,Claims Based Identity,Claims,给定一组特定的权限,例如EditPage、CreateProject、ModifyUser,我目前正在研究两种不同的方法来创建一些自定义声明类型,以模拟这种行为。我在网上几乎找不到关于最好的方法的信息,希望能得到一些反馈,了解您在自己的系统中是如何做到这一点的 我考虑的第一种方法是使用“action”声明类型,具体操作由声明的值指定: var claims = new [] { new Claim("http://schemas.company.com/claims/project/a

给定一组特定的权限,例如EditPage、CreateProject、ModifyUser,我目前正在研究两种不同的方法来创建一些自定义声明类型,以模拟这种行为。我在网上几乎找不到关于最好的方法的信息,希望能得到一些反馈,了解您在自己的系统中是如何做到这一点的

我考虑的第一种方法是使用“action”声明类型,具体操作由声明的值指定:

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")
}
第二种方法是使用索赔类型本身来定义正在执行的操作,而不使用该值。这类似于“OccessProperty”风格的安全性,只要用户拥有claimtype,他们就可以执行操作

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中编辑页面的用户

我们还计划将所有这些自定义声明存储在一个中央“授权”数据库中,因此需要唯一性


如果您有任何想法或反馈,我们将不胜感激。

好吧,您没有提供更多关于您意图的详细信息,但是如果您计划将这些声明作为用户身份的一部分,这显然是一种反模式

声明描述用户的身份(可能包括粗粒度授权数据,如角色)。要做出更细粒度的授权决策,请使用.NET中的ClaimsAuthorizationManager之类的工具

在这个扩展点上,您可以根据

a) 用户的身份 b) 用户试图访问的资源 c) 用户试图对资源执行的操作


换句话说,索赔是授权决策的输入,而不是直接的答案。

不,一点也不;)只是不要把所有这些索赔都作为索赔的一部分。是的,你想把索赔设置得尽可能小。拥有一个庞大的“东西”清单也很难维护。而是使用authzmgr抽象。对于authzmgr,我指的是ClaimsAuthorizationManager。我以为你指的是AzMan,作为一种管理更细粒度权限的方法。即使答案被标记为已接受,我认为初学者也不清楚。一个有效的演示会很好@mikesigs您是否执行了上述讨论?