我们已在MVC应用程序中使用OpenID-Connect实施Azure AD身份验证,并使用托管角色声明在应用程序中启用角色管理。
现在,由于索赔数量非常高,我们在应用程序中管理索赔遇到了新的麻烦。
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中托管应用程序,并考虑在用户登录后立即将声明存储在重新记录中,然后通过阅读每个页面中的相应声明来提供每个页面/模块中的访问权限。
如果您有任何更好的建议,请告诉我们。
谢谢
答案 0 :(得分:0)
登录声明存储在Cookie中。因此,从cookie中读取索引非常快,不需要访问您的数据库。
然而,cookie大小可能是个问题。如果您将太多数据放入cookie中,请求将变得过度浮动。单个cookie最高可达4Kb,总共最多16Kb(取决于浏览器)。因此,如果您达到该限制,则值得重新考虑您对索赔的处理方式。 (想象一下,一个AJAX请求发布了20个字符以获得201请求,但是通过网络拖动了大约16Kb的标题。)
显然,声明在cookie中加密,但数据增加的比率约为1.1。即对于索赔中的1Kb数据,您可以在线上获得大约1.1Kb的实际cookie大小(这是我在探索相同问题时使用cookie大小的经验)
如果你没有达到这些限制,我说不要过分担心。