我需要对尝试连接到我的服务器的用户进行身份验证。
我的第一个架构对数据库进行了三遍查询,以识别任何给定的用户:
.card
检查了与之相关的有效会话
用户提供的会话ID height
查询
数据库反序列化用户并检查特殊特权express-session
需要将新套接字与用户ID相关联(不需要其他数据),从而再次检查有效会话我的第一个直觉是废弃passport.js
并编写一个自定义socket.io
存储库,以将前两个步骤合并为一个对数据库的单个调用。
但是现在我不禁要问是否还有任何方法可以重用相同的调用来标识套接字,从而潜在地提供了多种好处(减少了数据库流量,单一身份验证逻辑等)。
我有一个主意: 完全切换到JSON Web令牌以存储用户ID以及客户端的到期日期。这样,即使不查询数据库(通过对JWT签名),也可以标识套接字。用户反序列化只需要一个数据库调用。
这是一种安全可行的选择吗?
潜在的缺点让我担忧不已:
passport.js
添加会话表中的行
与特定的用户ID相关联)还有其他有效的方法可以跨多个渠道对用户进行身份验证吗?