【问题标题】:WIF: Custom ClaimsWIF:自定义声明
【发布时间】:2012-02-03 15:23:38
【问题描述】:

我很难理解如何定义声明。网上有很多关于创建声明的信息,但似乎没有一个同意。我在不同的帖子中发现了声明的四个属性:

  • 声明类型
  • ClaimValue
  • 值类型

假设您要创建声明表示用户有权编辑用户对象,那么设置这些属性的正确方法是什么?

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

我很困惑,求助!

编辑:

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

1-ClaimType=编辑,ClaimValue=用户

2-ClaimType=Action,ClaimValue=EditUser

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

【问题讨论】:

    标签: wif claims-based-identity claims


    【解决方案1】:

    .Net 中有两种不同的Claim 类型。 WIF (Microsoft.IdentityModel.Claims) 中的一个和System.IdentityModel.Claims 中的一个在 WCF pre-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 开发中以多种不同方式使用。您的问题没有提供很多背景信息,无法通过示例给出非常具体的答案。

    【讨论】:

      【解决方案2】:

      我不确定您在哪里读到声明应该具有正确的属性,我认为这是对概念的滥用。

      一组声明本身并不传达用户权利。而是:

      声明集 + 政策 = 用户权限。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 2021-06-25
        相关资源
        最近更新 更多