【问题标题】:What does it mean for a jwt token to expirejwt 令牌过期是什么意思
【发布时间】:2021-07-25 05:02:11
【问题描述】:

我正在实施 jwt 令牌以进行用户验证。每当用户登录并将该令牌存储在我的数据库中时,我都会签署一个 jwt 令牌。然后,每当用户想要访问他们的个人信息时,他们都会向我发送他们的令牌,我检查数据库中是否存在此类令牌,​​如果存在,我允许访问(如果您知道更好的用户验证方法,请推荐)。问题是,我希望我的令牌每 24 小时过期一次,这意味着我希望数据库中的令牌每 24 小时成为一个空字符串,但是我做了一些实验:

const jwt = require('jsonwebtoken')
var token = jwt.sign({d:'tt'}, 'prvateKey', {expiresIn: 1000});
setTimeout(()=>{
    console.log(token)
}, 3000)

控制台上面的代码记录了实际的令牌,而不是空字符串、null 或类似的东西。 那么我的代码是否有些错误,或者过期的含义与我的想法不同?

【问题讨论】:

    标签: javascript node.js jwt


    【解决方案1】:

    expiresIn 选项便于设置令牌exp 声明。这就是 jwt 规范对此声明所说的内容:

    “exp”(到期时间)声明标识了到期时间,在该到期时间或之后,JWT 不得被接受处理。

    https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4

    jsonwebtoken 包文档还说:

    expiresIn:以秒或描述时间跨度 zeit/ms 的字符串表示。

    https://www.npmjs.com/package/jsonwebtoken#token-expiration-exp-claim

    使用jsonwebtoken 包,过期令牌实际上会在verify() 函数中转换,并在将token 传递给它进行处理时抛出一个名称为TokenExpiredError 的异常。

    var jwt = require("jsonwebtoken")
    var data = {
        "data": "some data"
    }
    var secret = "secret"
    var token = jwt.sign({ data }, secret, { expiresIn: 1 })
    
    setTimeout(function () {
        try {
            var payload = jwt.verify(token, secret)
        } catch (error) {
            console.log(error.name)   // output: TokenExpiredError
        }
    }, 1000)
    

    【讨论】:

      【解决方案2】:

      jwt.sign 将令牌作为字符串返回。这不会在到期时自动变为空,它只是一个字符串。但是,令牌将变为无效。您可以使用jwt.verify 方法检查令牌的有效性。如果令牌无效,jwt.verify 将出错。

      【讨论】:

        猜你喜欢
        • 2018-09-04
        • 2011-05-03
        • 2017-10-07
        • 1970-01-01
        • 2018-02-05
        • 2021-12-21
        • 2021-12-16
        • 2017-03-04
        • 2019-07-04
        相关资源
        最近更新 更多