【问题标题】:How authorize web application and manage sessions如何授权 Web 应用程序和管理会话
【发布时间】:2020-04-01 08:26:50
【问题描述】:

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

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

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

但我想是否有更简单的方法来处理这个问题,无需自己进行会话实现。

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

【问题讨论】:

  • 嗯...由于您使用的是 Redux,并且用户会话看起来像全局状态,您可以将令牌存储在商店中。这还不够吗?
  • 另外,为什么要为每个请求创建一个新的会话 ID?我认为它可能有很多异步问题。您每次只能执行一个请求!
  • @Macabeus 是的,我可以存储它,但我的主要问题是关于后端部分.. 我应该实现自己的会话管理器吗?
  • @aminmsh 请更新问题的标签。我认为问题是关于前端部分的(请标记reduxreactjs...)。此外,最好使用第三方解决方案,因为它太容易做错事并打开安全漏洞。

标签: express session redux web-applications authorization


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多