首页 > 解决方案 > Symfony 4 和 LexikJWTAuthenticationBundle 令牌的存储是什么?

问题描述

我正在使用带有 LexikJWTAuthenticationBundle 的 Symfony 4。我的应用程序运行良好,但我想知道 用户令牌的存储位置在哪里。确保它们没有存储在数据库中。

现在我可以使用TokenStorageInterface并调用$tokenStorage->getToken()->getUser()通过令牌获取登录用户(令牌在标头中发送)。这里有人可以向我解释它是如何工作的吗?

标签: symfony4lexikjwtauthbundle

解决方案


JWT 令牌不存储在任何地方,它们是自包含的。令牌包含它需要的所有信息,例如用户 ID(或用户名或您配置的任何内容)并由您的密钥签名,因此您的应用程序知道它是由应用程序还是其他人创建的。

下面是它的工作原理:

  1. 您通过捆绑包创建一个令牌,默认情况下它包含令牌类型、令牌到期日期、您的角色和您的用户标识符(id、用户名、电子邮件、任何配置),它还由公钥/私钥对或其他任何内容签名你配置了
  2. 您的客户端使用 JWT 令牌发送请求
  3. 捆绑包检查令牌是否由应用程序签名以及是否未过期(以及您是否没有将令牌标记为无效)
  4. 捆绑包通知 Symfony 安全系统,令牌将您认证为存储在用户标识符中的用户

这就是简化的流程,这就是创建 JWT 令牌的原因——您不需要将它们存储在任何地方,它们包含所有信息并且不能被篡改。

存储 JWT 令牌的唯一原因是,如果您想在它们过期之前使其失效,那么您需要存储令牌并检查它是否已失效;如果是,您可以使用捆绑包中提供的事件将其标记为无效。


推荐阅读