JWT令牌中应该包含多少配置文件数据



我正在使用JWT进行Node+Express API的路由保护;我通常将用户的配置文件信息存储在jwt令牌中,除非是细粒度的PII。但我想知道最佳实践是什么。

我有以下用户模式(猫鼬(:

USER {
_id: ObjectID,
userName: string,
img: string,
email: string,
role: string
}

我可能不想在JWT负载中抛出img以避免不必要的哈希成本,但我还可以在JWT有效负载中抛出哪些其他信息/属性?

--大型JWT是否存在性能限制因素

我见过一些人只使用_idusername属性,但我希望有一个我坚持的标准,以保持一切良好和统一。

谢谢!:(

您应该在JWT令牌中放入足够的信息来验证您的用户,而无需发出额外的数据库请求。这就是有效负载的全部意义,这样就可以分发身份验证。如果您需要发出数据库请求来验证每个API调用,那么您还没有实现分发,因为您仍将在数据库中集中身份验证过程。

但是,请注意,您放入JWT代币的所有内容都是公开的。任何人都可以对令牌进行base64解码以提取有效载荷。因此,如果您不经常使用(对于每个API调用(,我建议不要将用户的电子邮件地址包含在有效负载中。恶意脚本可能会以某种方式访问令牌并获取电子邮件地址(这确实有价值,可以卖给"电子邮件营销人员"(。用户的ID应该足以识别该用户。

如果您的UI需要显示用户名,那么您也可以包括该名称,但我个人会将其委托给概要文件API调用(我通常为此实现/myself端点(。

我还将用户的角色包括在有效负载中,以避免需要查询数据库来检查用户是否有权进行API调用。