如何存储/检索大量用户身份声明
How to Store / Retrieve a Large Number of User Identity Claims
我有一个发布到 Web 服务器场的 ASPNET CORE 2.0 网站。我正在使用 Identity Role/User 声明进行授权。我有大量与已登录用户关联的声明,这会增加应用程序 cookie 的大小。我看到了一些处理这种情况的技巧,但不确定该采取什么方法。
- 使用自定义
ClaimsTransformer
:在身份 Role/User 声明表之外创建自定义数据库存储并在 TransformAsync
上加载声明。我不确定是否有更好的解决方案不涉及每次往返服务器的数据库调用。
- 在指定
ApplicationCookie
时指定分布式缓存会话存储。我不确定这是否会解决膨胀的 cookie 问题。
- 使用粘性会话来存储用户声明。我认为这不适用于索赔授权 (
[Authorize]
)
当用户有大量声明时,如何跨多个 Web 服务器使用基于声明的身份?
Cookie 大小基本上是反对 "everything as a claim," 的最有力论据,这很不幸,因为该模型运行良好,否则(我一直站在你的立场上)。正如您所怀疑的那样,最好的方法是将您的声明限制在最低限度,并根据需要使用身份(主题 ID)从数据库中检索更详细的 app-specific 信息。
如果数据库 response-time 是一个问题,那么您基本上回到了有状态会话数据。 Microsoft 可能会引导您使用 Redis in-memory 缓存。不确定这是否是亚马逊上的一个选项,我使用 Azure。
我尝试了 ClaimsTransformer
例程,但它变得越来越麻烦,不断解决 "is this really a claim or just something we're treating as a claim?" 与仅分离 persistence/retrieval 真实 IDP 声明与内部 application-level 用户数据。
我有一个发布到 Web 服务器场的 ASPNET CORE 2.0 网站。我正在使用 Identity Role/User 声明进行授权。我有大量与已登录用户关联的声明,这会增加应用程序 cookie 的大小。我看到了一些处理这种情况的技巧,但不确定该采取什么方法。
- 使用自定义
ClaimsTransformer
:在身份 Role/User 声明表之外创建自定义数据库存储并在TransformAsync
上加载声明。我不确定是否有更好的解决方案不涉及每次往返服务器的数据库调用。 - 在指定
ApplicationCookie
时指定分布式缓存会话存储。我不确定这是否会解决膨胀的 cookie 问题。 - 使用粘性会话来存储用户声明。我认为这不适用于索赔授权 (
[Authorize]
)
当用户有大量声明时,如何跨多个 Web 服务器使用基于声明的身份?
Cookie 大小基本上是反对 "everything as a claim," 的最有力论据,这很不幸,因为该模型运行良好,否则(我一直站在你的立场上)。正如您所怀疑的那样,最好的方法是将您的声明限制在最低限度,并根据需要使用身份(主题 ID)从数据库中检索更详细的 app-specific 信息。
如果数据库 response-time 是一个问题,那么您基本上回到了有状态会话数据。 Microsoft 可能会引导您使用 Redis in-memory 缓存。不确定这是否是亚马逊上的一个选项,我使用 Azure。
我尝试了 ClaimsTransformer
例程,但它变得越来越麻烦,不断解决 "is this really a claim or just something we're treating as a claim?" 与仅分离 persistence/retrieval 真实 IDP 声明与内部 application-level 用户数据。