我们在MVC应用程序中使用OpenID-Connect实现了Azure AD身份验证,并使用托管的Roles-Claims在应用程序中启用角色管理。
现在,由于索赔数量非常高,我们在管理申请中的索赔方面遇到了新的麻烦。
SQL DB:1)主声明表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,总共最多16Kb(取决于浏览器)。因此,如果您达到了这个限制,那么值得重新考虑您对索赔的处理方式。 (想象一下,一个AJAX请求发布了20个字符以获得201请求,但是通过网络拖动了大约16Kb的标头)。
显然,声明在cookie中加密,但数据增加的比例约为1.1。即对于索赔中的1Kb数据,您将获得大约1.1Kb的实际cookie大小(这是我在探索相同问题时的cookie大小经验)
如果你没有达到这些限制,我会说不要太担心它。