ASP.NET标识:为什么用户属性和声明?

时间:2014-10-14 08:59:16

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

我现在真的迷失于尝试理解ASP.NET Identity 2.1.0,并且需要回顾基础知识,以便更好地了解Cookie和声明的工作方式。

一个基本的查询是我不确定我理解为什么用户需要属性以及声明:声明只是一个键+值+权限,因此可能已被使用用于存储属性(键+值)?     *保留两组属性(除了属性上的Typed get / sets)有什么好处?有人打算比其他人更短暂吗?     *仅仅是为了区分Cookie中的序列化和往返行程(只有声明,对吧?)?         *谈论这个...只是检查:所有声明都是通过在cookie中序列化来进行往返,或者它只是它们的一部分(例如ClaimTypes.Roles)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

用户的所有声明都已序列化为Cookie。并非所有ApplicationUser属性都被序列化为声明。实际上,大多数属性都没有序列化为声明(除非特别编码)。

您混淆了两个概念:声明是ClaimsPrincipal : IPrincipal的一部分,可用于每个HTTP请求(如果用户已通过身份验证)。当用户登录并序列化为cookie时,ClaimsPrincipal是从ApplicationUser创建的。

ApplicationUser模型是一种将用户信息保存到数据库中的方法,其他属性只是数据库中用户表的附加字段。您可以通过添加声明来对您的Cookie中的这些属性进行编码,但这些属性不会自动成为您的声明。

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

回答您的上一个问题:所有声明都已在Cookie中序列化并往返。因此,不要在cookie中添加太多信息 - 这些信息可以累加起来,并且您将会绕过太多的数据。

相关问题