如何检查 twilio 令牌是否过期

How to check if a twilio token is expired

我有一个 nextjs 项目,我需要验证一个 twilio 令牌是否过期。

我考虑过使用库 jwt-decode 来解码令牌并从中获取 exp 属性,然后将其与实际日期进行比较。问题是 exp 日期似乎被打破了,因为它总是在 1970 年。

例如我刚刚创建了这个令牌:

{
  "jti": "SKbec4a565d0598f1e4130f65db51a8345-xxxxxxxxxx",
  "grants": {
    "identity": "618f7ef057c2923be10dfd1d",
    "chat": {
      "service_sid": "ISbffc1a6c2f8647ac8a6774xxxxxxxxxx"
    }
  },
  "iat": 1649879042,
  "exp": 1649882642,
  "iss": "SKbec4a565d0598f1e4130f6xxxxxxxxxx",
  "sub": "AC1d09a2edee3f481fbd1dafxxxxxxxxxx"
}

如果我 new Date(1649882642) 结果是 1970-01-20T02:18:02.642Z。总是。

也许我应该在创建令牌时指定令牌到期时间?我在 official doc 之后创建了它。那么我应该怎么做才能确定令牌是否有效?

Twilio JWT 中的 iatexp 值是自纪元(1970 年 1 月 1 日)以来的秒数。

然而,Dates in JavaScript are measured in milliseconds since the the epoch.

因此,要将以秒为单位的时间调整为 JavaScript 中的日期,您应该先乘以 1,000。

const exp = decodedToken.exp;
const expiryDate = new Date(exp * 1000);

在您的示例中,它看起来像:

const exp = 1649882642;
const expiryDate = new Date(exp * 1000);
expiryDate.toISOString();
// => 2022-04-13T20:44:02.000Z