我已经阅读了所有有关该主题的教程和问题,但它们彼此矛盾
声明(用户声明和角色声明)被序列化为cookie(以及您通过覆盖原理工厂指定的自定义身份用户属性),但是不会被查询,而是存储在cookie中,这意味着用户拥有的声明越多拥有更多的数据将不得不在服务器和浏览器之间往返
默认情况下,自定义身份用户属性不会序列化,而是会从数据库中查询,因此,每当您需要该数据时,它都会从数据库中查询它,如果您经常查询该请求,则对每个请求在数据库上要做的工作更多
所以哪个更有效更安全
例如
IsAdmin应该是角色/声明吗?但是如果有人偷走了cookie,不,那该cookie已经包含了userid / username / securitystamp,因此,即使它是一个属性,被盗cookie上的userid也会查询自定义身份用户属性,或者是否有可能阻止这个cookie从什么时候起被盗?
另一个实例
如果我为用户设置了20个属性(名字,姓氏,地址1,地址2,邮政编码,无论何种情况),我是否应该让用户稍等一下,以便将较大的较慢的cookie发送回去来回还是应该使用自定义身份用户从数据库执行所有工作
但是,然后,如果我向用户删除或添加了声明,那么如果不被查询或安全戳是否验证此cookie仍然有效,是否会在下一个请求上对其进行更新?
因为在Task AddClaimsAsync
efcore的用户存储区中,它仅将声明添加到dbset
我很抱歉,我知道有很多问题要问,但是关于此事的资源不是很好,阅读身份信息很容易迷失方向
经验法则-将频繁添加的项目作为要求,其他所有内容都可以存在于DB中并按需查询。即,不是每个请求都要求地址1,地址2,因此请将其保存在数据库中。
另一方面IsAdmin
(无论如何,都应该是一个角色),我可以想象每个请求都会被检查,因此它应该在cookie中,而不必查询数据库。
如果您担心自己的Cookie被盗,请不要将其显示给任何人!设置SecurityStampValidator
为进行频繁检查-例如每5分钟检查一次。基本上,这会使用数据库中的最新信息来更新cookie并更改cookie。因此,即使cookie被盗,它也只能工作5分钟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句