gpt4 book ai didi

asp.net 核心身份声明与属性(效率观点)

转载 作者:行者123 更新时间:2023-12-01 01:51:28 25 4
gpt4 key购买 nike

我已经阅读了有关该主题的所有教程和问题,但它们相互矛盾

声明(用户声明和角色声明)被序列化为一个 cookie(以及您通过覆盖原则工厂指定的自定义身份用户属性)但它们不会被查询,它们存储在 cookie 中,这意味着用户拥有的声明越多,服务器和浏览器之间往返的数据就越多

默认情况下,自定义身份用户属性不会序列化,而是从数据库中查询,因此每次您需要该数据时,它都会从数据库中查询 如果您经常查询,每个请求对数据库要做的工作更多

所以哪个更有效,哪个更安全

例如

IsAdmin 应该是一个角色/声明吗?但是如果有人偷了 cookie,不,cookie 已经包含用户 ID/用户名/安全戳,所以即使它是一个属性,被盗 cookie 上的用户 ID 也会查询自定义身份用户属性,或者有什么可以阻止的这个 cookie 被盗后还能用吗?

另一个实例

如果我有用户的 20 个属性(名字、姓氏、地址 1、地址 2、邮政编码,无论情况如何),我是否应该让用户稍等一下,等待一个更大、更慢的 cookie 被发回或者我应该使用自定义身份用户从数据库中完成所有工作

但是,如果我删除或向用户添加声明,如果它没有被查询或者安全标记是否验证此 cookie 仍然有效,它会在下一个请求中更新吗?

原因在 Task AddClaimsAsync在 efcore 的用户存储中,它只将声明添加到 dbset

我很抱歉,我知道有很多问题要问,但关于此事的资源并不是那么好,阅读身份来源很容易迷失方向

最佳答案

经验法则 - 将频繁添加的项目作为声明,其他所有内容都可以存在于数据库中并按需查询。 IE。地址 1、地址 2 不能在每个请求中都需要,所以将它们保存在数据库中。

另一方面IsAdmin (无论如何应该是一个角色)我可以想象每个请求都会被检查,所以它应该在cookie中而不必查询db。

如果您害怕您的 cookies 被盗,请不要将它们展示给任何人!设置 SecurityStampValidator做频繁的检查——比如每 5 分钟一次。这基本上是用数据库中的新信息更新 cookie 并更改 cookie。所以即使cookie被盗,它也只能工作5分钟。

关于asp.net 核心身份声明与属性(效率观点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com