簡體   English   中英

jwt 令牌過期意味着什么

[英]What does it mean for a jwt token to expire

我正在實施 jwt 令牌以進行用戶驗證。 每當用戶登錄並將該令牌存儲在我的數據庫中時,我都會簽署 jwt 令牌。 然后,每當用戶想要訪問他們的個人信息時,他們都會向我發送他們的令牌,我檢查數據庫中是否存在此類令牌,如果存在,我允許訪問(如果您知道更好的用戶驗證方法,請推薦)。 問題是,我希望我的令牌每 24 小時過期一次,這意味着我希望數據庫中的令牌每 24 小時成為一個空字符串,但是我做了一些實驗:

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

控制台上面的代碼記錄了實際的令牌,而不是一個空字符串 null 或類似的東西。 那么我的代碼是不是有些錯誤,或者到期是否意味着與我想的不同?

jwt.sign將令牌作為字符串返回。 這不會在到期時自動變為空,它只是一個字符串。 但是,令牌將變為無效。 您可以使用jwt.verify方法檢查令牌有效性。 如果令牌無效, jwt.verify將出錯。

expiresIn選項便於設置令牌exp聲明。 這就是 jwt 規范關於此聲明的內容:

“exp”(過期時間)聲明標識了 JWT 不能被接受處理的過期時間或之后。

https://tools.ietf.org/html/rfc7519#section-4.1.4

jsonwebtoken package 文檔還說:

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

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

使用jsonwebtoken package,過期令牌實際上在verify() function 中進行轉換,在傳遞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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM