繁体   English   中英

使用 session 变量(Express/NodeJs)进行用户身份验证

[英]User authentication with session variable (Express/NodeJs)

使用 session 变量在后端记住登录是一个坏主意?

好吗? 安全呢? 还是替代品?

后端:Express (NodeJs) 前端:MaterialUI (React)

我正在寻找一种简单的方法来在输入之前检查访问权限,然后重新记住登录的用户。

我是小学生。 非常感谢您的建议。

我可以轻松做到。 已经完成了。 但我担心安全问题或其他问题。

session 变量的问题在于您正在设计单点故障,并且稍后您将面临可伸缩性问题。 这意味着如果您的服务器出现故障,存储在 session 变量中的所有用户数据都将丢失。

可扩展性问题

假设您有两台服务器,服务器 A 和服务器 B,并带有一个将请求路由到您的服务器的负载平衡器。 用户 A 发出的第一个请求命中服务器 A; 您创建 session 变量并将所有相关数据存储到服务器 A 中的该用户。现在,在第二个请求中,假设请求命中服务器 B,现在服务器 B 不知道有关于该用户的此类数据,无论该用户已登录,具有适当的授权等。


解决方案

解决方案 1:如果您仍想使用 session 变量,您必须部署一个缓存服务器,如 memcached 或 Redis 来将 Z21D6F40CFB511982E4424E0E250A955Z 变量存储给您的用户。 然后在可扩展性方面发生的事情是,您的服务器将订阅此缓存服务器,并且它们都可以访问任何服务器存储的有关任何用户的任何数据。 在安全性方面,您根本不应该依赖客户端。 您应该信任您的服务器和代码来处理正确的身份验证和授权。

解决方案 2:您可以将 JWT 令牌存储在 cookie 中。 在每个请求中,您从 cookie 中获取令牌、验证令牌并获取有关该用户的任何其他数据。 此时,您甚至不需要 Redis 因为此令牌将存储在客户端; 无论服务器 A 还是 B 收到请求,它们都可以毫无问题地验证它。 但是,您必须小心如何发行、签署、验证和处理令牌。 此外,您必须通过 HTTPS 传输令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM