asp.net-identity - ASP.NET 标识 : Why User Properties AND Claims?

标签 asp.net-identity asp.net-identity-2

我现在真的迷失在理解 ASP.NET Identity 2.1.0 的过程中,需要回顾一下基础知识,以便更好地理解 cookie 和声明的工作原理。

一个基本的查询是围绕我不确定我是否理解为什么用户需要属性以及声明:不是声明只是一个键+值+权限,因此可以用于存储属性(键+值) ?
* 保留两组属性有什么好处(除了属性上的 Typed get/sets)?一个是否打算比另一个更短暂?
* 是否只是为了区分 Cookie 中的序列化和往返(仅声明,对吧?)?
* 说到这……只是检查一下:所有的 Claims 都是通过在 cookie 中序列化来进行往返的,还是只是它们的一个子集(例如 ClaimTypes.Roles)?

谢谢您的帮助!

最佳答案

对用户的所有声明都被序列化为 cookie。不是所有 ApplicationUser属性被序列化为声明。事实上,大多数属性都没有序列化到声明中(除非专门编码)。

您混淆了 2 个概念:声明是 ClaimsPrincipal : IPrincipal 的一部分可用于每个 HTTP 请求(如果用户已通过身份验证)。 ClaimsPrincipal创建自 ApplicationUser当用户登录并序列化为 cookie 时。
ApplicationUser模型是一种将用户信息持久化到数据库中的方法,附加属性只是数据库中用户表的附加字段。您可以编写代码,通过添加声明使这些属性在您的 cookie 中可用,但它们不会自动成为您的声明。

添加额外信息可以通过添加声明或通过 ApplicationUser 中的附加属性来实现。表。您可以控制如何添加数据。但请记住,这些可以用于不同的目的。如果您在 ApplicationUser 上添加属性,您是说所有用户都应该为此有所作为。如果您添加具有相同数据的声明,则表示该用户拥有其他用户可能没有的一些数据。

回答您的最后一个问题:所有声明都在 cookie 中进行序列化和往返。因此,不要在 cookie 中放入太多信息——这些信息会累加起来,您将往返传输太多数据。

关于asp.net-identity - ASP.NET 标识 : Why User Properties AND Claims?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26356613/

相关文章:

security - 为什么 ASP.Identy 使用 Base32 对 SecurityStamp 进行编码(内部实现)

asp.net - 使用 ASP.NET Identity 创建无密码的用户

c# - 如何将 ActiveDirectoryMembershipProvider 与 ASP.NET Identity 一起使用?

asp.net-mvc - 删除声明同步身份 2.2

asp.net-mvc - 如何强制 Asp.Net Identity 2.0 使用自定义角色而不是 IdentityUserRole

c# - 获取 View 中的当前用户的 ASP.NET 标识

asp.net - Dotnet core 2.0 使用身份与 JwtBearer 身份验证

asp.net-mvc - ASP.NET Identity,持久性 cookie - 是内置的类似的东西吗?

ASP.NET WebAPI Identity 2 - 用户注册/注册方法上的 GetOwinContext 错误

asp.net-mvc - 名称不能为 null 或为空。 asp.net 身份 mvc 5 + EntityFreamwork