我正在尝试允许用户在多个设备上登录到相同的用户名。在后端,我们通过oauth2orize NPM包将节点/快速REST API与OAuth2 JWT令牌一起使用。
目前我们的后端身份验证的工作方式是,用户登录,向其发送一个JWT令牌和一个JWT刷新令牌。当用户注销时,令牌将失效。我们遇到的问题是,用户将登录到一台计算机,然后在另一台计算机上登录到相同的帐户。当第二次登录时,会向用户提供新的令牌和刷新令牌。现在,当用户返回第一台计算机时,刷新令牌无效,导致用户注销。
一种解决方法是,我们试图在Cookie中保留一个会话ID,但ANGLE似乎每次请求都会返回一个新的会话ID。以下是这些请求的一个示例。
-- session --
l3s-kZCEUaz8TYhElVtARIwbl6PKTm_o
{ cookie:
{ path: '/',
_expires: Fri Aug 05 2016 00:23:44 GMT+0000 (UTC),
originalMaxAge: 31449600000,
httpOnly: true } }
-- session --
hN961RAc2YSlmzngr3R6zXuJnp4cFF_P
{ cookie:
{ path: '/',
_expires: Fri Aug 05 2016 00:23:46 GMT+0000 (UTC),
originalMaxAge: 31449600000,
httpOnly: true } }
任何关于通过cookie返回正确的会话ID的帮助,或者关于如何处理多个登录的任何其他建议,我们都将非常感激。
1条答案
按热度按时间8qgya5xd1#
你尝试的方法接近于解决问题。只需生成一个随机字符串,而不是获取会话ID。然后,在更新令牌时,检查tokenID和随机字符串是否相同。如果不是,则添加为新登录,否则更新当前令牌。同样的检查也适用于注销方法。
通过应用这一点,同一用户在登录不同的设备时将获得不同的令牌,并且JWT令牌到期将根据每个设备的登录时长而起作用。