【问题标题】:JWT token exp is in weird format when making an API call进行 API 调用时,JWT 令牌 exp 的格式很奇怪
【发布时间】:2020-11-02 15:19:15
【问题描述】:

我正在尝试将 JWT exp 时间转换为日期格式。奇怪的是,如果我使用谷歌浏览器并查看本地存储,我会得到这种格式:1594663193098

但是当我使用 node 通过下面的函数进行 API 调用时,我得到了这个:21599

尝试将第二个日期转换为 1970 年的常规日期,除非我执行类似 new Date(21599 * 73830000) 的操作,它返回大约正确的时间,我知道它会在 12 小时或 24 小时后到期,不确定。

使用来自 chrome 的令牌我得到这个结果 new Date(1594663193098 * 1000) = +052502-11-12T22:04:58.000Z

const refreshToken = async () => {
  const requestBody = {
    grant_type: "refresh_token",
    client_id,
    client_secret,
    refresh_token
  };

  const config = {
    headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    }
  };

  const url = "https://www.externalapiurl/api/oauth2/token";

  return axios
    .post(url, qs.stringify(requestBody), config)
    .then(response => response.data)
    .catch(error => console.log(error));
};

为什么我用 node 得到不同的 exp 格式,我怎样才能从中得到正确的 exp 日期?

【问题讨论】:

  • 首先,你不需要将时间戳乘以1000。只需使用new Date(1594663193098)
  • 不,* 是错误的。所以我想我有点明白了。来自浏览器的时间 1594663193098 是一个日期,即 JWT 到期的日期。来自 api 调用的 21599 似乎是一段时间,直到它过期。所以我认为我必须做当前日期,再加上 21599 才能获得正确的到期日期......我认为
  • JWT 过期时间以秒为单位(根据RFC 7519 - JSON Web Token (JWT)),但您拥有的第一个值以毫秒为单位。令牌似乎有问题,这可能是您行为怪异的原因。
  • 如果我从 localstorage 令牌中获取发布时间和 exp 时间,我得到 -21599000,这是我从 api 调用获得的 expire_in 值 * 1000 (21599 * 1000)。所以基本上 chrome 采用该值并将其转换为未来日期。我如何在节点中做到这一点?我得到了令牌,创建了一个新的日期,我如何添加 21599000 到它?
  • 您使用的库是什么?这是错误的,因为时间戳的单位是秒,而不是毫秒。

标签: javascript node.js date jwt momentjs


【解决方案1】:

21599(秒)只是告诉您令牌将在 6 小时后到期,并没有给您实际日期。所以我只是从我获得令牌的那一刻开始创建一个时间戳并将 6h 添加到它。

timeNow = new Date()
timeNow.setSeconds(timeNow.getSeconds() + 21599);

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2022-12-06
    • 2018-09-13
    • 2020-07-07
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多