Sol*_*ush 7 mongoose mongodb node.js express jwt
我正在使用 JWT 进行 Node+Express API 的路由保护;我通常将用户的个人资料信息存储在 jwt 令牌中,除非是精细的 PII。但我想知道对此的最佳实践是什么。
我有以下用户架构(猫鼬):
USER {
_id: ObjectID,
userName: string,
img: string,
email: string,
role: string
}
Run Code Online (Sandbox Code Playgroud)
我可能不想将img放入 JWT 有效负载中以避免不必要的哈希成本,但是我还可以将哪些其他信息/属性放入 JWT 有效负载中?
--较大的 JWT 是否存在性能限制因素?
我看到有些人只使用_id和username属性,但我希望有一个我坚持的标准,以保持一切美好和统一。
谢谢!:)
sle*_*man 13
您应该在 JWT 令牌中放入足够的信息来验证您的用户,而不需要发出额外的数据库请求。这就是有效负载的全部意义 - 以便可以分发身份验证。如果您需要发出数据库请求来验证每个 API 调用,那么您还没有实现分发,因为您仍然将身份验证过程集中在数据库中。
但是,请注意,您放入 JWT 令牌中的所有内容都是公开的。任何人都可以对令牌进行 Base64 解码以提取有效负载。因此,如果您不经常使用用户的电子邮件地址(对于每个 API 调用),我建议不要在有效负载中包含用户的电子邮件地址。恶意脚本可能会以某种方式访问令牌并获取电子邮件地址(这确实有价值并且可以出售给“电子邮件营销人员”)。用户的ID应该足以识别用户。
如果您的 UI 需要显示用户的姓名,那么您还可以包含该姓名,但我个人会将其委托给配置文件 API 调用(我通常/myself为此实现一个端点)。
我还将用户的角色包含在有效负载中,以避免需要查询数据库来检查用户是否有权进行 API 调用。