使用Node.js / Express.js,跨两台服务器实施用户身份验证的最佳方法是什么?

时间:2019-03-25 13:37:54

标签: node.js express server socket.io

我的设置如下。 我有一台节点/快速Web服务器(S1),其中显示了我的所有网站并实现了某种用户身份验证。 我想从S1上的一个网站访问/重定向到我的另一个node / express / socket.io服务器(S2),该服务器更多地依赖于socket.io api。 如何最好地使用已经由S1获得并验证的用户凭据连接到S2?更具体地说,我不想通过queryString发送用户凭证,也不知道如何通过socket.id访问用户凭证/请求参数。

1 个答案:

答案 0 :(得分:0)

基于令牌的身份验证是一种典型的解决方案。基于JWT的令牌在这里可以很好地工作。使用用户登录,您将生成JWT令牌,其中包括某种形式的用户ID。然后将JWT发送到S2服务器(例如,通过Authorization标头)。 S2服务器将检查令牌签名并获取它的用户ID。有关JWT的一些建议:

1)最好是使用基于RSA的签名。您将公共密钥分发给S2,以便S2只能验证。而且只有S1才能签名。

2)尽量避免包含敏感数据。 user-id可能很好,但user-email可能不合适。

如果不是JWT,则不透明令牌是另一种选择。在这种情况下,您将必须在S1上构建另一个“全面”端点来验证令牌。然后,S2将使用它来检查令牌是否有效。在根本不公开用户ID或任何其他与用户上下文相关的信息的情况下,通常使用不透明令牌。另外,JWT往往比不透明的令牌大(50-100b时约1kb),这在某些情况下很重要。