ClaimsPrincipal的作用是什么,为什么它有多个身份?

66

我正在尝试理解基于声明的 .NET 安全模型,用于应用程序(Relying Party)。

我知道有两个主要的类:

  • ClaimsPrincipal - 运行进程的安全上下文
  • ClaimsIdentity - 存储关于用户的信息 - 认证状态和声明

问题在于,ClaimsPrincipal 只包含一个身份集合,并指向当前使用的身份,但据我所知,原则上 principal 通常不包含超过一个身份,即使有多个身份,用户也从未使用多个身份登录。

对我来说,除了用它来获取当前身份之外,ClaimsPrincipal 对我而言毫无用处。

除了我所述的以及与 ClaimsPrincipal 类相关的向后兼容性之外,我还缺少什么?

3个回答

129
事实上,如果您的应用程序需要n因素身份验证(n> 1),则上下文中的ClaimsPrincipal始终将具有多个身份。不要以为一个principal通常只包含一个identity,即使是有多个identity - 用户也永远不会使用2个或更多的identity登录。试着这样看待它吧:Principal = 用户,Identity = 驾照、护照、信用卡、谷歌账户、Facebook账户、RSA SecurID、指纹、面部识别等。如果你被警察拦下来,他们不仅根据你的驾照验证你是谁。他们还需要看到你的脸。否则你可以展示任何人的驾照。因此,基于多个身份进行身份验证是有意义的,有时也应该这样做。这就是为什么一个ClaimsPrincipal可以拥有任意数量的ClaimsIdentity。

3
这是一个非常好的解释。肯定要点赞。现在,您是否已经对有关安全设置概念(或哲学)的架构的其他问题进行了类似质量和洞察力的回答?我查看了一些资料,但没有找到类似的内容。更具体地说,我想看到有关声明、范围、策略和资源之间关系的解释。(注意:不是定义也不是常见示例,而是类比“现实生活”概念的简短比较以及一些典型案例 - 就像您在这里所做的那样)。 - Konrad Viltersten
谢谢您的赞美,@KonradViltersten。您是否查看了官方文档?我建议您浏览快速入门,以真正掌握声明、范围和资源的概念。不确定什么是策略。https://docs.duendesoftware.com/identityserver/v5/fundamentals/ - Ali Reza Dehdar
1
我一直在阅读IDS4的官方文档。我了解到他们已经成立了一家新公司(Duende),并将从那里重新启动 - 虽然我不确定那里的文档是否可靠。我肯定会去看看。 - Konrad Viltersten

12

8
一个重要的安全原则是“谁说了算”,即我们是否信任主张对身份进行声明的一方,因此对于特定的ClaimsPrincipal,我们可能有不同的身份,每个身份都会断言一组不同的声明,这些声明允许我们确定应用程序中的总体访问控制。
以通过Windows认证进行身份验证的企业应用程序为例,在其中我们还希望根据在应用程序数据库中的团队或部门进行一些访问控制。
使用ClaimsTransformationManager,我们可以统一这两个集合,即在用户经过身份验证后,可以查找用户在数据库中的团队/部门,并创建由应用程序发出的一组声明。
因此,现在我们有了Windows断言的角色(在底层是声明),以及应用程序身份断言团队或部门的自定义声明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接