WIF:自定义声明

时间:2012-02-03 15:23:39

标签: wif claims-based-identity claims

我很难理解如何定义索赔。网上有很多关于创建声明的信息,但似乎都没有达成一致。我在不同的帖子中找到了声明的四个属性:

  • ClaimType
  • ClaimValue
  • ValueType
  • 右键

考虑到您想要创建声明的场景,表示用户有权编辑User对象,设置这些属性的正确方法是什么?

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

我很困惑,帮忙!

编辑:

感谢您的回复。为了使这个更具体一点,我目前看到两个选项可用于我的自定义声明:

1-ClaimType = Edit,ClaimValue = User

2-ClaimType =动作,ClaimValue = EditUser

选项一似乎更“基于声明”,并且选项似乎更“基于角色”。想法?

2 个答案:

答案 0 :(得分:4)

.Net中有两种不同的Claim类型。一个在WIF(Microsoft.IdentityModel.Claims)和一个System.IdentityModel.Claims中用于WCF前WIF(虽然它不是WCT的一部分)。正如您所提到的,只有System.IdentityModel.Claims.Claim具有Right属性。

我使用WCF和ASP.Net的声明方法,无论有没有WIF,WIF编程模型肯定是两者中的简单。

对于您描述的用户编辑方案,我将使用合适的名称定义角色。 UserEditor可以没问题,但听起来非常具体。您应该查看要授予这些用户的所有权限的集合,并提供合适的汇总名称(可能是UserAdministrator?)。

对于这些用户,您应添加角色声明(即http://schemas.microsoft.com/ws/2008/06/identity/claims/roleMicrosoft.IdentityModel.Claims.ClaimTypes.Role类型)。如果您的身份提供商位于您的应用程序外部,并且您无法控制其发出的声明,则您需要实施自定义ClaimsAuthenticationManager,以通过添加新角色声明来转换已发布的声明集。

然后,您可以使用PrincipalPermissionAttribute这样的内容来装饰您要授予访问权限的操作:

[PrincipalPermission(SecurityAction.Demand,Role =“UserAdministrator”)]

这个框架非常灵活,可以在ASP.Net,WCF或常规.Net开发中以多种不同的方式使用。您的问题没有给出很多背景信息,只能通过示例给出非常具体的答案。

答案 1 :(得分:2)

我不确定你在哪里读到声称应该拥有正确的财产,我认为这是滥用这个概念。

一组索赔本身并未传达用户权利。更确切地说:

声明设置+ 政策 =用户权限。

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

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