基于令牌的身份验证是否需要在DB中存储令牌?

San*_*ull 5 authentication token

我在身份验证中使用基于令牌的方法,但在许多博客中我读到他们在数据库中存储令牌.

我们是否需要在DB中基于令牌的身份验证中存储令牌?

https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication

在这个博客中,提到我们签署令牌而不是存储在数据库中,我认为这应该是实现真正的无状态的方法.

and*_*dih 8

如果您使用链接/提到的网页中描述的基于令牌的身份验证,则没有必要将令牌存储在数据库中。

您必须考虑的是,可以传输资源服务器所需的所有必需信息,以安全方式在令牌内交付请求的资源。

例如,要以安全的方式传输userId,您还可以对令牌进行加密。如果您想确保出于安全原因某些数据永远不会离开您的数据中心,那么最好将这些数据保存在数据库中,并且令牌仅包含对存储在数据库中的用户相关数据的引用(id) - 这更多或更少在Open ID connect 中描述的内容。

您还应该记住,将用户信息添加到令牌意味着每个请求都有额外的负载,并且可能需要更长的时间来加密/解密和签署/验证签名。

如果您打算使用无状态/无数据库的方法,您应该澄清:

  • 令牌的可能大小
  • 额外的 CPU 负载来签署/验证/加密/解密令牌
  • 标题大小限制
  • 用于在数据中心内签署/验证/加密/解密令牌的密钥的分发
  • 延长令牌的生命周期
  • 代币的撤销
  • 额外的安全要求 - 即如果攻击者能够读取/(解密加密的)令牌是否有问题?