c# - 如何存储/检索大量用户身份声明

标签 c# asp.net-core asp.net-core-2.0 claims-based-identity amazon-elastic-beanstalk

我有一个发布到 Web 服务器场的 ASPNET CORE 2.0 网站。我正在使用身份角色/用户声明进行授权。我有大量与登录用户相关的声明,这导致应用程序 cookie 的大小膨胀。我看到了一些处理这种情况的技巧,但我不确定该采取什么方法。

  • 使用自定义 ClaimsTransformer:在身份角色/用户声明表之外创建自定义数据库存储,并在 TransformAsync 上加载声明。我不确定是否有更好的解决方案,不涉及到服务器的每次往返调用数据库。
  • 在指定 ApplicationCookie 时指定分布式缓存 session 存储。我不确定这是否能解决 cookie 臃肿的问题。
  • 使用粘性 session 来存储用户声明。我认为这不适用于声明授权 ([Authorize])

当用户有大量声明时,如何跨多个 Web 服务器使用基于声明的身份?

最佳答案

Cookie 大小基本上是反对“一切都是声明”的最有力论据,这很不幸,因为该模型效果很好,否则(我一直处于你的立场)。正如您所怀疑的那样,最好的方法是将您的声明限制在最低限度,并根据需要使用身份(主题 ID)从数据库中检索更详细的特定于应用程序的信息。

如果数据库响应时间是一个问题,那么您基本上会回到有状态 session 数据。 Microsoft 可能会引导您使用 Redis 内存缓存。不确定 Amazon 上是否有此选项,我使用 Azure。

我尝试了 ClaimsTransformer 例程,但它变成了一个更大的麻烦,不断解决“这真的是一个声明还是只是我们视为声明的东西?”而不是仅仅将真实 IDP 声明的持久性/检索与内部应用程序级用户数据分开。

关于c# - 如何存储/检索大量用户身份声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49200617/

相关文章:

c# - ExecuteCommand servicecontroller - 无法对服务执行命令

c# - 如何在 C# 中读取 MKV 电影文件的长度和其他信息?

c# - 在 Asp Core 中上传时调整图像大小

angular - Angular 5 和 .NET Core 2 的 Windows 身份验证

linux - 在 Windows 上的 Docker 容器中编辑 ASP.NET Core 网站并在 Ubuntu VPN 上运行

asp.net-core - Portable.BouncyCaSTLe 是跨平台的吗?

javascript - 是否可以将 .NET 对象公开给 JavaScript,该对象具有返回 IEnumerable 的方法?

c# - 使用 Open Hardware Monitor 获取 CPU 温度

asp.net - ASP.NET Core 中的默认日志级别、系统日志级别和 Microsoft 日志级别是什么

asp.net-core - OpenIddict 在 token 响应中获取用户 ID