NodeJS 基于令牌的身份验证与基于会话的身份验证之间的差异

0md85ypi  于 2023-02-08  发布在  Node.js
关注(0)|答案(2)|浏览(146)

因此,我在我的API上实现了某种形式的身份验证,我不确定它属于哪一类。
我的应用程序所做的是,一旦用户注册/登录,它就会生成一个令牌,然后在每次端点调用之前,我有一个中间件函数来检查令牌是否存在,然后解密它,如果它是正确的,它就会将用户信息存储在req.user中。
这是否属于基于令牌的身份验证?
我在网上查了一下,发现如果我不把令牌作为cookie存储在客户端,而是把用户信息作为会话存储在服务器端,把会话ID作为cookie存储在客户端,它就被归类为基于会话的身份验证。
因此,很明显,我的应用程序有令牌为基础的授权权利?
(很抱歉,如果我想澄清一些非常基本的东西,我是一个非常初学者)

thigvfpy

thigvfpy1#

是的,您已经在您的方案中实现了基于令牌的身份验证,基于会话的身份验证与您需要在后端存储会话以跟踪客户端是否有效的方法完全不同,但在基于令牌的情况下,您不需要存储会话,但您将拥有两个令牌,如ACCESS TOKENREFRESH TOKEN并且需要在数据库中存储刷新令牌,以防将来重新生成访问令牌,这就是基于令牌的身份验证的工作原理!

n9vozmp4

n9vozmp42#

你写你“检查一个令牌是否存在”,我假设这意味着你在数据库中查找它。这与express-session相当相似,其中cookie包含一个令牌,并且会话也在数据库中查找。区别可能是你不是在cookie中而是在请求头中传输令牌(你没有说你使用哪种技术)。
然而,基于令牌的授权的一个重要方面是令牌 * 不需要 * 在数据库中查找,而是可以通过验证签名完全在内存中验证。这更快,消耗更少的资源。特别是如果您的服务器接收到许多(恶意)带有无效令牌的请求,它可以检测并拒绝它们,而不会给数据库增加负载。另请参见Some questions about refresh tokens的答案。
如果会话ID还包含签名,并且在数据库中查找会话 * 之前 * 对签名进行验证,则可以将此方法与基于会话的方法结合使用。
jwt标签下阅读更多关于签名令牌和签名验证的信息。

相关问题