C# 什么';这是ClaimsPrincipal的角色,为什么它有多重身份?
我试图根据应用程序(依赖方)的声明来理解.NET背后的安全模型 我知道有两大类:C# 什么';这是ClaimsPrincipal的角色,为什么它有多重身份?,c#,.net,authentication,wif,claims-based-identity,C#,.net,Authentication,Wif,Claims Based Identity,我试图根据应用程序(依赖方)的声明来理解.NET背后的安全模型 我知道有两大类: ClaimsPrincipal-正在运行的进程的安全上下文 ClaimSideEntity—存储有关用户身份验证状态和声明的信息 问题是,ClaimsPrincipal只包含一组身份,并指向当前使用的身份,但据我所知,主体通常不会包含超过1个身份,即使会-用户从未使用2个或更多身份登录 对我来说,ClaimsPrincipal,除了用它来获取当前身份,请原谅我的无知,它是无用的 除了我所说的,让我们说一下关于C
- ClaimsPrincipal-正在运行的进程的安全上下文
- ClaimSideEntity—存储有关用户身份验证状态和声明的信息
除了我所说的,让我们说一下关于ClaimsPrincipal类的向后兼容性之外,我还缺少什么?一个重要的安全原则是“谁说”,即我们是否信任主张对身份进行索赔的一方,因此,对于特定的ClaimsPrincipal,我们可能有不同的身份,每个身份都声明了一组不同的声明,这允许我们确定应用程序中的越权访问控制 让我们以通过Windows身份验证进行身份验证的企业应用程序为例,我们还希望基于应用程序数据库中的团队或部门声明一些访问控制 使用ClaimsTransformationManager,我们可以统一这两个集合,即在对用户进行身份验证后,我们可以在数据库中查找用户的团队/部门,并创建由应用程序发布的一组声明 因此,现在我们有了由Windows断言的角色(即隐藏在引擎盖下的声明),以及断言团队或部门自定义声明的应用程序标识 问题是,ClaimsPrincipal只包含一组身份,并指向当前使用的身份,但据我所知,主体通常不会包含超过1个身份,即使可能-用户从未使用2个或更多身份登录 这是一个错误的假设。事实上,如果应用程序需要n因素身份验证(n>1),则上下文中的ClaimsPrincipal将始终具有多个标识 试着这样看 主体=用户 身份=驾照、护照、信用卡、谷歌账户、Facebook账户、RSA SecurID、指纹、面部识别等 如果你被警察拦下,他们不会仅仅根据你的驾照来核实你是谁。他们还需要看到你的脸。否则你可以出示任何人的驾照
因此,为什么身份验证可以而且有时应该基于多个身份是有道理的。这就是为什么一个ClaimsPrincipal可以有任意数量的claimsentity。如上所述,
用户的类型是ClaimsPrincipal
,它由claimsentity
组成
我制作了一张图表来更容易地解释它:
如果你正在为索赔而挣扎,我建议你读一下这篇文章
精彩的文章!