php - Jwt token 如何在登录系统中真正起作用?

标签 php session authentication jwt token

<分区>

我正在努力为这个问题找到一个稳定的答案,但没有得到任何答案。我的疑惑是

  1. 我们是否需要将用户名和密码存储在 token 中?如果是,那么如何存储这些数据,即这些数据在负载部分中的存储位置是在 sub 中吗?
  2. 我们是否需要在注册时将 token 存储在数据库中
  3. Jwt token 是否对于同一组数据是唯一的(我认为没有时间不同的原因)
  4. 如何验证用户?那首先是从输入中创建数据的标记然后 创建 token 并使用数据库中的 token 验证它?
  5. 如何退出?
  6. 比session好吗

最佳答案

1) 您需要在 JWT 中存储一些用户标识。通常列出她在身份验证期间验证的授予权限和显示名称之类的内容是有意义的。绝对不要存储密码。

2) 不, token 没有存储在数据库中。 token 的生命周期很短,需要每隔几分钟对用户透明地重新发行一次。

3) 每次重新发布 JWT 时,它都是唯一的,因为其中编码的内容之一是它过期的时间戳。

4) 第一个 token 是在身份验证期间创建的。然后每个请求通过使用您用于编码的私钥对其进行解码来验证 token 。如果 token 即将到期,您可以使用相同的数据+更新的到期时间戳发布新 token 。

5) 注销现在是前端的工作。您需要停止使用 token 发送请求。如果您将 JWT 作为 cookie 发送,则可能删除 cookie。

6) 这比使用 session 要好,因为它是无状态的。第一个明显的好处是,如果您正在运行由多个 Web 服务器组成的集群,则您不再需要在数据库中存储 session 信息/维护客户端 IP 地址关联。

关于php - Jwt token 如何在登录系统中真正起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435491/

相关文章:

PHP Sessions,打印 session 信息的问题

design-patterns - Flutter-如何在 Flutter 的整个应用程序生命周期中将数据保存在内存中?

linux - psql -U 用户pgrouting认证失败

objective-c - 使用选项卡栏 Controller ( Storyboard)阻止访问 UIViewControllers

PHP 5.3.3 配置模块

php - 航海者 Laravel 5 : Wrong paths for images

php - "Undefined variable: _SESSION"对比。 "A session had already been started"

PHP - 使用给定参数从数组中删除项目

php - 为什么 Doctrine 2在重复查询时会去DB?

android - Facebook SDK 3.0 : Unable to call openForPublish after the during a session state CLOSED_LOGIN_FAILED