自定义声明MVC应用程序中的身份管理

时间:2017-12-19 22:12:20

标签: c# asp.net-mvc azure asp.net-identity

我们已在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中托管应用程序,并考虑在用户登录后立即将声明存储在重新记录中,然后通过阅读每个页面中的相应声明来提供每个页面/模块中的访问权限。

如果您有任何更好的建议,请告诉我们。

谢谢

1 个答案:

答案 0 :(得分:0)

登录声明存储在Cookie中。因此,从cookie中读取索引非常快,不需要访问您的数据库。

然而,cookie大小可能是个问题。如果您将太多数据放入cookie中,请求将变得过度浮动。单个cookie最高可达4Kb,总共最多16Kb(取决于浏览器)。因此,如果您达到该限制,则值得重新考虑您对索赔的处理方式。 (想象一下,一个AJAX请求发布了20个字符以获得201请求,但是通过网络拖动了大约16Kb的标题。)

显然,声明在cookie中加密,但数据增加的比率约为1.1。即对于索赔中的1Kb数据,您可以在线上获得大约1.1Kb的实际cookie大小(这是我在探索相同问题时使用cookie大小的经验)

如果你没有达到这些限制,我说不要过分担心。