如何授权Web应用程序和管理会话

时间:2019-12-07 17:21:02

标签: express session redux web-applications authorization

我正在构建一个使用redux作为状态管理器并将Express Node js作为后端服务器的单页反应应用程序,但是我不知道在应用程序中授权用户的最佳方法是什么!

如果这是一个php或express-js网站,我可以使用PHPSESSION或express-session来管理用户会话数据,但是现在单页Web应用程序与后端分离了,我无法像以前一样管理会话! / p>

我的想法是为每个新的Web请求创建一个会话ID,然后将其保存在本地存储中的客户端中,然后在服务器中将所有需要的信息存储在数据库中,并且当应用程序具有API调用时,在请求中发送该ID标头。然后,我们可以使用该已实现的会话来检查授权。

但是我想如果有一种更简单的方法来解决此问题,而无需自己进行会话实现。

(我不想使用第三方服务(例如firebase或okta)或将所有会话数据保存在客户端部分(例如JWT)。

1 个答案:

答案 0 :(得分:0)

最后,我实现了一个自定义会话管理器(SessionMush),以便客户端向服务器发送请求并获取令牌ID,然后使用它来访问服务器中的会话。

每个会话都应该可以通过标识令牌(在此称为sid)进行访问,以便应用程序可以保存该令牌以访问和使用该会话。您的应用程序的服务器端状态可以用于保存客户端身份验证状态或您要在服务器端使用它们的有关客户端的任何临时数据,因此在您的应用程序中,您将保存该标识令牌,然后随着每个请求将其发送到HTTP标头,然后服务器将基于数据库中保存的会话数据(该ID的服务器端状态)知道您是谁,以及您之前在应用程序上做了什么,因此它可以根据客户端身份为您提供所需的信息,它在服务器上的状态。它被创建为用作快速中间件,而mongodb作为数据存储。

当您的应用程序没有会话且第一次加载时,它将向服务器发送请求以获取其自身的身份当请求被接收到服务器时,服务器会分析该请求并发现其中存在不存在任何会话ID(sid),因此它将为此请求创建一个新的会话ID,并将其添加到响应标头部分,因此当服务器决定发送响应时,它也会发送已创建的会话信息。客户应保存该信息以将该会话用于其其他请求。它可以在请求标头部分发送该ID以显示其标识。如果会话在一定时间内未使用,则会话也可能过期。因此,当服务器出现错误或会话期满时,它将像没有任何会话的请求一样运行,因此它将为该请求创建一个会话并发送其信息,如我们之前解释的那样。

enter image description here