Node.js - Jsonwebtoken 计算 "iat" 和 "exp"

8
我正在使用Node.js和Express构建一个API,并使用JWT进行身份验证,这非常有效。但我无法确定与IAT值相关联的确切日期和时间。我知道它是基于毫秒的,但我不能将其转换为日期。官方的JWT规范如下:(https://www.rfc-editor.org/rfc/rfc7519#page-10)
“iat”(签发时间)声明标识了JWT签发的时间。可以使用此声明来确定JWT的年龄。它的值必须是包含NumericDate值的数字。使用此声明是可选的。
例如:
"iat": 1479203274,
"exp": 1479205074,

有什么想法吗?

谢谢!

2个回答

9
您可以通过以下方式利用毫秒的Unix时间戳来构建日期: var date = new Date( timestamp ) 因此,在您的情况下,请尝试执行以下操作: var date = new Date(parseInt("1479203274") * 1000) *1000是将秒转换为毫秒。由于JavaScript会自动将表达式强制转换为数字,因此parseInt并不是必需的。它只是为了更清晰地表达意图。

1
谢谢!这真的很有帮助。 - Aart Nicolai

0

如果您遵循以下方式,就不需要指定当前时间戳。当前时间戳和过期时间戳将自动获取。

const jwt = require("jsonwebtoken");
...

const payload = {
        "iss": "<your iss>",
        "sub": "<your sub>",
        "aud": "<your aud>"
    };
const privateKey = fs.readFileSync(`my_sig_key.pem`);

const signed = jwt.sign(payload, privateKey, {
    algorithm: '<Your Algorithm>'
    expiresIn: '5s' //Its expires in 5seconds. You can set minute, hour too.
});

console.log("signed", signed);

JWT 中的最终有效载荷将是:

{
  "iss": "<your iss>",
  "sub": "<your sub>",
  "aud": "<your aud>",
  "iat": 1645869827,
  "exp": 1645869947
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接