HttpContext.User.Claims vs HttpContext.User.Identities.Claims?区别?何时使用一个而不是另一个?

时间:2017-08-25 16:46:07

标签: .net authentication asp.net-core-mvc asp.net-identity claims-based-identity

HttpContext.User ClaimsPrincipal的集合为Claims,但HttpContext.User也有ClaimsIdentity的集合,其集合包含IsAuthenticated声称甚至是Name@XmlElement相同的属性。

用户模仿管理员的实例是什么目的或何时使用其中一个?还是代表团?看起来他们能够在角色和声明方面跟踪相同的信息。如果我想让一个用户冒充另一个用户,似乎我可以用模拟用户覆盖HttpContext.User并只存储一个值来表明它是模仿和原始用户,或者我可以添加模仿用户对ClaimsIdentities?或者是其他东西?

我对这个结构知之甚少,无法确定优缺点,或者是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

你不能使用一个而不是另一个。如果ClaimsIdentity属性中有一个IdentitiesClaimsIdentity的集合),则User.Identity将返回该标识。使用基本登录功能的应用程序很容易验证。

enter image description here

Claims属性将返回Identities属性中每个身份的所有声明。琐碎的是,如果你只有一个身份,那么你只能获得该身份的声明。

拥有多个身份背后的基本理念与您在钱包中随身携带驾驶执照,公交车通行证和工作证的原因相同。每个身份都为您提供了访问权限。到不同的区域并允许您(合法地)执行单独的操作。