首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ASP.Net.Core.Identity中,一个角色/用户可以有多少个声明?

在ASP.Net.Core.Identity中,一个角色/用户可以有多少个声明?
EN

Stack Overflow用户
提问于 2019-11-22 01:42:40
回答 2查看 1.3K关注 0票数 3

一个角色或用户可以有多少个声明?我一直在开发一个使用ASP.Net.Core 2.2和AspNet.Core.Identity的应用程序。在我的浏览器上测试之前,一切都很好。在VS2019中的调试下,没有这样的问题。

我部署了我的应用程序进行进一步的测试,并遇到了这个错误(如下所示)。我在IE,GC和FF中也有同样的问题。

代码语言:javascript
运行
复制
HTTP Error 400. The size of the request headers is too long.

我使用的是RolesRoleClaims

在深入研究后,我发现它与角色/声明有关,因为它们太多了,以至于它会炸毁缓存。基本上,Identity试图将所有声明存储在cookie中,而cookie现在太大了。

这似乎真的很奇怪,微软会给你所有的复杂性,而你却被浏览器所阻挠。

所以我的问题是:-如果你可以因为浏览器限制而利用角色/声明,那么角色/声明的意义是什么?-有任何关于假想限制的记录(max,no。每个角色的声明数)?

EN

Stack Overflow用户

发布于 2019-11-22 02:37:48

这个限制不是想象出来的,也不是基于浏览器的。请求限制由服务器设置,是一种安全措施。因此,尝试增加限制真的不是一个好主意。

此外,这里没有关于最大索赔数量之类的实际指导,因为它是基于变量的:单个索赔的类型和大小,以及请求的其他部分,如在任何给定时间可能添加或不添加的附加头。然而,限制通常是8-32K,即使是在低端,这仍然是相当多的索赔,你应该能够在达到限制之前添加。一般来说,您还应该考虑传输大小。声明是身份验证票证的一部分,这意味着客户端必须在每次请求时传输它们。每个请求8K可能看起来不是很多,但在用户会话的生命周期中可能会显著增加,特别是当用户使用慢速或有上限的数据连接时。

长此以往,你应该做的最好的事情就是减少索赔数量。并不是所有的东西都需要或者应该是一个声明。将其他数据存储在用户配置文件中,并根据需要进行查询。你唯一绝对应该拥有的声明是关键的东西,比如id、用户名/电子邮件和角色。其他任何东西都可以在以后需要时从备用存储中获取。

首先,还可以选择使用备用存储来实际保存身份验证票证数据。您可以简单地发送一个标识符,然后根据该标识符提取实际数据,类似于会话的工作方式,而不是将所有内容都作为cookie发送,然后必须随每个请求一起返回。这是通过创建ITicketStore的实现并为CookieAuthenticationOptions.SessionStore设置该实现来完成的。有一个old sample for using cache as the store。您可能需要为新版本的ASP.NET核心修改代码。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58980811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档