Session 具有大负载的NodeJ中的会话与JWT令牌

Session 具有大负载的NodeJ中的会话与JWT令牌,session,jwt,auth0,Session,Jwt,Auth0,我正在从事一个nodejs项目,来自PHP背景。我对前端和后端分别开发以及与API调用通信印象深刻 问题:我需要对用户进行身份验证,并在服务器中存储用户的一些数据,这些数据会导致jwt有效负载大小和jwt令牌的增加 所以我使用了JWT令牌机制,在成功登录后生成一个令牌并将其发送给客户端,然后客户端将该令牌添加为每个API调用的头,然后在服务器中验证令牌并获取解码的有效负载数据 这就是过程。但是我有一些在nodejs中总是需要的用户数据,因此JWT负载大小增加,JWT令牌大小也变大。所以客户端每次

我正在从事一个nodejs项目,来自PHP背景。我对前端和后端分别开发以及与API调用通信印象深刻

问题:我需要对用户进行身份验证,并在服务器中存储用户的一些数据,这些数据会导致jwt有效负载大小和jwt令牌的增加

所以我使用了JWT令牌机制,在成功登录后生成一个令牌并将其发送给客户端,然后客户端将该令牌添加为每个API调用的头,然后在服务器中验证令牌并获取解码的有效负载数据

这就是过程。但是我有一些在nodejs中总是需要的用户数据,因此JWT负载大小增加,JWT令牌大小也变大。所以客户端每次都会发送大尺寸的令牌

我在php中使用会话来维护用户数据。 如果我使用会话进行身份验证,它将是有状态的,对吗

疑问:

有没有办法在服务器中维护登录的用户数据? 如果使用大负载,如何减少JWT令牌的长度? 更新:


另外,如果我使用会话,它会利用数据库存储会话,因此需要DB调用

如果我使用小负载令牌(例如:userid)进行身份验证,并在身份验证后使用userid进行DB调用以获取详细信息,该怎么办


在这两种方法中,是否都需要DB调用?哪种方法似乎更好?

使用会话会引入服务器状态,但允许您在服务器上保留用户数据和会话数据。只有会话id必须与客户端共享

不能缩短JWT令牌的长度。更大的有效负载意味着更大的令牌。理论上,您可以使用某种压缩,但这将是一个非常高的技术开销,可能不值得

在服务器上保存会话可以解决您的问题

它还让服务器完全控制会话。当用户注销时,服务器可以删除会话。当客户端删除他的JWT令牌时,您无法绝对确定用户是否已注销。令牌本身仍然有效


使用JWT作为会话容器通常是个坏主意。这只是引入了几个安全问题,您必须自己处理。您必须确保第三方JavaScript不会读取令牌,仅举一个问题。有许多博客文章详细解释了这些问题,搜索停止在会话中使用JWT,但我只能建议不要在会话中使用JWT。会议不是一件坏事

谢谢你的回答。说真的,我不会在训练中使用JWT。如果我只使用会话来解决这个问题,它就不会是无状态的,对吗?而且它也不适用于像aws lambda这样的无服务器环境,对吗?会话引入状态,这是正确的。无服务器并不意味着无状态。您可以运行无服务器的Web服务,并在内存或数据库中保存状态,例如,如果您不介意的话,还有一个疑问。所以我可以完全依靠会话来验证所有API调用?与jwt相比,这种方法还有什么缺点吗?Express提供了一个会话管理模块。您当然可以使用该库或任何其他库。Serverless不会以任何方式阻止会话。另外,如果我使用会话,它会利用数据库存储会话,因此需要DB调用。如果我使用小负载令牌(例如:userid)进行身份验证,并在身份验证后使用userid进行DB调用以获取详细信息,该怎么办?在这两种方法中,是否都需要DB调用?哪种方法似乎更好?