Node.js 在每个请求中包含承载令牌并保持用户登录

Node.js 在每个请求中包含承载令牌并保持用户登录,node.js,jwt,express-session,Node.js,Jwt,Express Session,我在某个服务器上运行了一个API,当您向登录端点发送成功的请求时,它会为您提供一个JSONWEBTOKEN。 在我的第二台服务器上,我正在运行一个向API发送请求的网站。我想要的是保存用户登录时收到的JWT令牌,并将其保存,以便用户的下一个请求也会发送承载令牌,同时保持用户登录 我已尝试在请求中包括express session,使用 app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) 但我找不到如何准确

我在某个服务器上运行了一个API,当您向登录端点发送成功的请求时,它会为您提供一个JSONWEBTOKEN。 在我的第二台服务器上,我正在运行一个向API发送请求的网站。我想要的是保存用户登录时收到的JWT令牌,并将其保存,以便用户的下一个请求也会发送承载令牌,同时保持用户登录

我已尝试在请求中包括express session,使用

app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
但我找不到如何准确地使用它来完成文档中需要的工作

快速回答

我想要的是保存用户登录时收到的JWT令牌,并保存它 在web服务器中,创建令牌。所以你可以在任何地方存储(db)。当您需要撤销令牌或停止某些用户的任何活动等功能时,通常需要这样做。因此,您需要web管理员,删除此用户并标记电子邮件和/或令牌,因此当此用户执行新的http调用时,系统将显示“您的不允许…”

如果您没有此功能,请不要将令牌存储在服务器中。只需创建它并发送给用户。常见的javascript框架将在浏览器中的某个位置存储此令牌,如localstorage,当需要调用api时,javascript框架仅从localstorage获取令牌

因此,来自用户的每一个下一个请求也会发送承载令牌 如果前端中有一个有效的令牌,则可以将其用于api的下一个请求

同时保持用户的日志记录 这是另一个世界:从安全角度来看,强烈建议检测空闲用户并使其会话过期

无论怎样,如果您需要让用户保持登录状态,我将向您展示两种策略:

延长有效期(不推荐)

尽可能长时间配置express过期和令牌过期

刷新

在web服务器中创建一个端点,如/refresh。此端点将负责刷新web express服务器中的会话,并在令牌已过期时刷新令牌。最后,使用javascript(当前框架)的浏览器中的web int必须每隔一段时间到达其端点。有了它,您的会话和令牌将永远不会过期

这也有助于检测空闲用户。例如,使用javascript可以检测单击或其他事件。因此,在本例中,调用/refresh端点。活动用户将拥有有效的web express会话和续订的令牌。空闲用户不会触发此单击事件,因此不会调用/refresh endpoint。当user welcome执行单击时,/refresh端点将被调用,并且必须返回标志,指示web express会话已过期,令牌也已过期


外部化你的安全引擎 如果您有更多的网站、API、移动应用程序等,请阅读本节

基于当今世界级平台的工作方式,如果您有更多的网站/API等,我建议您使用oauth2

您的api中的/login端点更接近。您的工件将是:

  • 安全服务器/引擎(管理身份验证和授权)
  • 原料药
此安全引擎必须以最简单的方式具有两个端点:

/登录 为令牌交换有效凭据

  • 网站、系统或应用程序不得在其内部实现此逻辑。必须使用ajax从其web服务器后端(express)或浏览器中的javascript使用/登录
  • 生成的令牌必须发送到web。web将把它发送到API
/验证令牌: 此端点负责检查令牌是否有效、签名是否正确、是否过期等

API,必须接收令牌并检查其验证使用/validate-token端点。如果是有效的令牌,api必须执行请求的操作,如列出客户、在db上保留值等。如果此端点返回错误,api将向web通知此错误,web必须向用户显示错误

如果您有一个Api网关,请在其上配置此端点,以便每次调用Api时,Api网关都将执行传入令牌的验证

Oauth2需要很多其他端点 Oauth2需要许多其他端点和功能,如:所有应用程序的唯一表单登录、授予许可流、刷新令牌、撤销令牌、用户管理等

最后,我的建议是开发您自己的安全引擎,或者如果您没有时间(总是)搜索一些oauth2服务器或oauth2提供商并使用它

检查这些oauth2文件或流样本:

  • Oauth2备选方案:
  • 简易工作流程:
并检查我自己的oauth2提供程序:


这应该在您的网站上处理,因为您正在从那里发送请求。您可以将登录响应和令牌存储在本地存储器中,以及如何将其添加到每个请求中,这取决于您的网站内置的平台。希望这有帮助:)@MohammedAmirAnsari这就是我想做的,我的网站正在运行一个express服务器,但我不知道下一步该怎么做。你有两个不同的web和api工件,还是所有的工件都在一个工件中?@JRichardsz不同,我的api在不同的服务器上运行。我想在运行网站的服务器上处理会话。您是在后端请求登录端点,还是在前端使用javascript/ajax/form?您使用什么语言为您的网站提供服务?您的/登录端点部署在哪里、api中还是网站的服务器中?