HttpContext.User.Claims 对比 HttpContext.User.Identities.Claims?区别?什么时候使用一个而不是另一个?
HttpContext.User.Claims vs HttpContext.User.Identities.Claims? Difference? When to use one over the other?
一个HttpContext.User
是一个ClaimsPrincipal
有一个集合Claims
,但是HttpContext.User
也有一个ClaimsIdentity
的集合,它有一个声明的集合,甚至是 IsAuthenticated
和 Name
等相同的属性。
在模拟管理员用户的情况下,使用其中一个的目的是什么或何时使用?还是代表团?看起来他们能够在角色和声明方面跟踪相同的信息。如果我想让一个用户模拟另一个用户,似乎我可以用模拟用户覆盖 HttpContext.User 并只存储一个值以指示它是模拟用户和原始用户,或者我可以将模拟用户添加到索赔身份?或者是其他东西?
我只是对这种结构了解不够,无法确定优缺点,或者是否有更好的方法。
你不能一个一个地使用另一个。如果 Identities
属性(ClaimsIdentity
的集合)中有一个 ClaimsIdentity
,那么 User.Identity
将 return 那个标识。使用具有基本登录功能的应用程序可以轻松验证这一点。
Claims
属性 将 return Identities
属性 中每个身份的所有声明。平凡地,如果您只有一个身份,那么您只能获得该身份的声明。
拥有多重身份背后的基本思想与您可能将驾照、公交卡和工作证都放在钱包里的原因相同。每个身份都会让您 "access" 进入不同的区域,并允许您(合法地)执行不同的操作。
一个HttpContext.User
是一个ClaimsPrincipal
有一个集合Claims
,但是HttpContext.User
也有一个ClaimsIdentity
的集合,它有一个声明的集合,甚至是 IsAuthenticated
和 Name
等相同的属性。
在模拟管理员用户的情况下,使用其中一个的目的是什么或何时使用?还是代表团?看起来他们能够在角色和声明方面跟踪相同的信息。如果我想让一个用户模拟另一个用户,似乎我可以用模拟用户覆盖 HttpContext.User 并只存储一个值以指示它是模拟用户和原始用户,或者我可以将模拟用户添加到索赔身份?或者是其他东西?
我只是对这种结构了解不够,无法确定优缺点,或者是否有更好的方法。
你不能一个一个地使用另一个。如果 Identities
属性(ClaimsIdentity
的集合)中有一个 ClaimsIdentity
,那么 User.Identity
将 return 那个标识。使用具有基本登录功能的应用程序可以轻松验证这一点。
Claims
属性 将 return Identities
属性 中每个身份的所有声明。平凡地,如果您只有一个身份,那么您只能获得该身份的声明。
拥有多重身份背后的基本思想与您可能将驾照、公交卡和工作证都放在钱包里的原因相同。每个身份都会让您 "access" 进入不同的区域,并允许您(合法地)执行不同的操作。