authentication - 基于 token 的身份验证需要在数据库中存储 token 吗?

标签 authentication token

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

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

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

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

最佳答案

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

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

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

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

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

  • token 的可能大小
  • 用于签名/验证/加密/解密 token 的额外 CPU 负载
  • 标题大小限制
  • 用于在数据中心内签名/验证/加密/解密 token 的 key 的分发
  • 延长 token 的生命周期
  • token 的撤销
  • 额外的安全要求 -
    即如果攻击者能够读取/(解密加密的) token ,这是否有问题?
  • 关于authentication - 基于 token 的身份验证需要在数据库中存储 token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797370/

    相关文章:

    angular - 为什么我的 auth0 token 在刷新页面或单击 Angular 应用程序中的链接时会过期?

    spring-security - 使用 spring-authorization-server 时将 token 存储在 redis 中

    java - Struts2登录管理和授权

    c - 如何使用 strtok()

    php - 构建良好的 php 应用程序可以学习吗?

    css - 如何在 ASP.NET 登录控件中使用我自己的自定义样式文本框?

    git - 删除了对密码身份验证的支持。请改用个人访问 token

    node.js - Sails JS - 删除现有的 JWT

    asp.net-mvc - 使用 MVC 5 进行用户身份验证,无需 EF

    php - 无法使用 CURL 请求设置 "Host:" header