我应该将用户数据存储为声明还是存储在用户配置文件表中?

5
我正在开发一个公共系统,将来预计会有很多的访问量。这个系统是通过使用C# .NET来实现的。
我正在使用基于声明的身份验证,目前正在使用一个用户声明表来存储用户数据,但随着用户数量的增长,我认为这种方法将变得过慢以支持流量。因此,我考虑创建一个用户配置文件表来水平存储非安全相关数据,而不是像在声明表中垂直存储,只在声明表中保留安全数据。
这种方法合理吗?有人可以分享一下他们在此类情况下的经验和见解吗?
更新:
我的问题并不涉及传递给JWT令牌的大小。我的问题是关于严格使用“UserClaim”表将所有用户数据存储在Claim 表单中,而不是使用UserProfile或类似的表来存储某些数据,并找到“这些数据应存储在声明表中”,而“这些数据应存储在配置文件表中”的正确平衡点。

你确定索赔数量/大小是问题吗?这让我很惊讶。如果是这样,你可以使用 WIF 的小会话 Cookie 解决方案。它使用本地存储来保存索赔,并在会话 cookie 中仅使用指针/键/引用。 - paullem
1个回答

5
我建议只在授权决策中使用令牌中使用的数据,不要用用户个人资料信息填充令牌。
例如:令牌有效的时间戳、令牌预期的受众、用户名、组和角色等。更多信息请参见此处
在令牌中保留个人资料信息将强制您的应用程序在更改任何信息时获取新令牌。通常会缓存令牌以防止频繁重新发行令牌。

我的问题并不是与JWT本身有太大关系,因为我可以处理客户端通过作用域传输的声明。我只是在谈论用户数据,比如说“家乡”或者从Facebook个人资料中选择任何内容。我想知道他们是否有一个档案表来存储每个用户的非外键单个记录,或者他们是否将“家乡”添加为声明表中的实际声明。或者可能两者都有? - IWriteApps
我不知道FB是如何做到的。我认为他们可能有一个用户表来保存所有与用户相关的信息,但其他信息(例如角色)可能来自不同的表。在ADFS中,您可以选择每个声明要从AD查询哪个属性或针对SQL执行什么查询。 - MvdD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接