【问题标题】:json web token - expiration time not clearjson web token - 过期时间不清楚
【发布时间】:2016-04-15 22:24:53
【问题描述】:

我在节点 js 中使用 jsonwebtoken 包。我正在生成这样的令牌:

var token = jwt.sign({ email: email }, secret, { expiresIn: 144000 });

生成了令牌,但是当我查看 Chrome 的 cookie 控制台时,“Expires / Max-Age”列的值是“Session”,而不是像我预期的那样 24 小时后。我也尝试将 expiresIn 设置为 '1d',但结果是一样的。

谢谢。

【问题讨论】:

  • 这是一个服务器令牌,与浏览器 cookie 无关
  • 但是服务器令牌是如何工作的呢?
  • 您是在告诉服务器在这段时间内尊重该令牌。
  • 好的,但是服务器在哪里保存过期日期?如果它是服务器令牌,那么我在控制台中看到的令牌 cookie 的作用是什么?请解释机制。谢谢。
  • 您可能将从服务器接收到的令牌保存为 cookie。我认为您正在这样做 b/c 您提到在 Chrome 的“cookie 控制台”中查找(而不是在本地存储中)。如果这样做,则有两个过期时间:设置 cookie 时指定的过期时间(在这种情况下,cookie 在用户会话结束时过期),以及 JWT 中包含/编码的过期日期。

标签: node.js jwt express-jwt


【解决方案1】:

一旦服务器计算出token,它必须将它发送给客户端。然后,客户端负责为每个后续 HTTP 请求发送令牌作为 Authorization HTTP 标头的参数。换句话说,客户端负责将每个单独的 HTTP 请求的应用程序状态传达给 Web 服务器。

客户端将如何存储这些信息是 Web 服务器不关心的,它只关心自己资源的状态。两种常见的策略是本地存储和cookie。

由于令牌是自包含的,服务器不需要存储客户端状态。也就是说,不需要服务器端会话,从而使相应的会话 cookie 设置与令牌的行为无关。事实上,服务器只需要解码请求中HTTP Authorization 标头中提供的令牌,并检查exp 日期。如果报告的时间戳大于当前时间戳,则令牌已过期,服务器应拒绝进一步处理请求。

请注意,这两个方面(即客户端需要处理应用程序状态以及因此在服务器中缺少此类数据)允许根据 REST 无状态约束实现客户端/服务器交互。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2015-06-26
    • 2015-09-18
    • 2018-11-06
    • 2020-05-11
    • 2016-10-15
    • 2018-12-22
    • 2018-11-19
    • 1970-01-01
    相关资源
    最近更新 更多