我们在 MVC 应用程序中使用 OpenID-Connect 实现了 Azure AD 身份验证,并使用托管角色声明在应用程序中启用角色管理。
现在,由于 claim 数量非常高,我们在管理应用程序中的 claim 时遇到了新的麻烦。
SQL 数据库: 1) 主 claim 表 2) 角色表 3)RoleID-ClaimID映射表 4) UserClaims 表 - 这是维护 userid 和 roleid 映射的地方
C#:
var identity = new ClaimsIdentity(new[] {
new Claim("UserMgt:Maintenance", "True"),
new Claim("UserMgt:Add", "True"),
new Claim("UserMgt:Add", "True")
},
"ApplicationCookie");
。 。 .
我们不确定这是否会降低性能。我们将应用程序托管在 Azure 中,并考虑在用户登录后立即将声明存储在重新缓存中,然后通过读取每个页面中的相应声明来提供每个页面/模块中的访问权限。
如果您有更好的建议,请告诉我们。
谢谢
最佳答案
登录时的声明存储在 cookie 中。因此,从 cookie 中读取声明非常快,不需要访问您的数据库。
但是 cookie 大小可能是一个问题。如果您在 cookie 中放入太多数据,请求将会变得过于臃肿。单个 cookie 最大可达 4Kb, header 总数可达 16Kb(取决于浏览器)。因此,如果您达到了该限制,则值得重新考虑您对 claim 的处理方式。 (想象一个 AJAX 请求,它发布 20 个字符来获取 201 请求,但通过网络拖拽大约 16Kb 的 header )。
显然声明是在cookie中加密的,但是数据增长的比率约为1.1。 IE。对于声明中的 1Kb 数据,您将在网络上获得大约 1.1Kb 的实际 cookie 大小(这是我在探索同一问题时对 cookie 大小的实验)
如果您没有达到这些限制,我想说不要太担心。
关于c# - MVC 应用程序中的自定义声明身份管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895953/