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

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

我们在 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/

相关文章:

c# - 针对 amd64 与项目的目标平台 x86 c# 不兼容

c# - 我如何在窗口栏中获得菜单?

asp.net-mvc - 在mvc中根据其输入类型的属性(id)重命名上传的文件asp.net

javascript - 将 MVC javascript 部分正确转换为纯 javascript 文件

asp.net-mvc - 在 ValidationMessageFor 方法中动态将英语转换为西类牙语

azure - Azure 部署的有效预配状态是什么

c# - 有没有办法在 .net Framework 2 的 C# 应用程序中使用 linq?

HttpPostedFileBase 的 C# MVC 派生类为空

r - Azure ML R 模型训练和评分 Web 服务

azure - 支持 Active Directory Graph Api,无需 Azure 应用程序