2012-02-03 97 views
3

我很难理解如何定义索赔。网络上有很多关于创建索赔的信息,但没有一个似乎同意。我发现在不同的职位要求的四个属性:WIF:自定义索赔

  • ClaimType
  • ClaimValue
  • 值类型

考虑要建立一个要求一个场景的表示用户有权编辑用户对象,设置这些属性的正确方法是什么?

另外,在WIF中,似乎没有“Right”属性的属性。仅在WCF的上下文中使用“Right”吗?

我困惑,帮忙!

编辑:

感谢您的回复。为了使这个多一点具体的,我目前看到我的定制要求两个选项:

1 ClaimType =编辑,ClaimValue =用户

2 ClaimType =行动,ClaimValue = EditUser

选项似乎更多的是“基于索赔”,并且似乎更多地是“基于角色”。思考?

回答

1

我不确定你在哪里阅读的声明应该有一个正确的属性,我认为这是滥用的概念。

一套索赔本身并不表达用户权利。相反:

索赔集+ 政策 =用户权利。

通常,基于声明的应用程序会将策略应用于一组传入用户声明以作出授权决定。基于角色的访问是最常见的,因此这些决策可能与User.IsInRole(“Manager”)一样简单,只需检查用户是否拥有ClaimType =“http://schemas.microsoft.com/ ws/2008/06/identity/claims/role“和ClaimValue =”Manager“。

在线酒类商店可能要求用户超过21岁,在这种情况下,您会检查年龄声明。不过,对于加拿大版本的网站,如果年龄限制可能为18岁,则会有不同的政策。如果这些“权利”是通过索赔本身传递的,那么这种政策灵活性就不可能实现。

4

.Net中有两种不同的Claim类型。一个在WIF(Microsoft.IdentityModel.Claims)中,一个在System.IdentityModel.Claims中用于WCF pre-WIF(它不是WCT的实际组成部分)。正如你所提到的,只有System.IdentityModel.Claims.Claim有一个Right属性。

我在WCF和ASP.Net中使用了WIF和ASP.Net的声明方法,WIF和WIF编程模型都是最简单的。

对于您描述的用户编辑场景,我将使用合适的名称定义一个角色。用户编辑器可以,但它听起来很具体。你应该看看你想授予这些用户的所有权限的集合,并提出一个合适的总结名称(可能是UserAdministrator?)。

对于这些用户,您应该添加一个角色声明(即类型为http://schemas.microsoft.com/ws/2008/06/identity/claims/role或)。如果您的身份提供者在您的应用程序外部,并且您无法控制其发布的声明,那么您将需要实施自定义ClaimsAuthenticationManager,以通过添加新角色声明来转换发布的声明集。

然后你可以装饰你要授予了PrincipalPermissionAttribute这样的访问操作:

[的PrincipalPermission(SecurityAction.Demand,角色=“UserAdministrator”)

这个框架是相当灵活并且可以在ASP.Net,WCF或者只是常规的.Net开发中以多种不同的方式使用。你的问题并没有给出很多上下文来给出具体例子的答案。