[英]jwt.verify() returns jwt expired when the expiration is 24h
我用jwt創建一個令牌:
const jwt = require('jsonwebtoken');
const token = jwt.sign({
filePath: "path/to/file"
}, 'secretKey', {
expiresIn: "24h"
});
try {
console.log(token)
var decoded = jwt.verify(token, 'secretKey');
} catch(err) {
console.log(err)
}
jwt.header:
{
"alg": "HS256",
"typ": "JWT"
}
有效載荷:
{
"filePath": "path",
"iat": 1557833831,
"exp": 1557920231
}
當我在真實應用中測試上述代碼段時,收到錯誤消息:
jwt expired
使用jwt調試器 ,令牌是有效的,應在24小時后過期。 由verify()
返回的錯誤,用於檢查到期時間。 jwt如何檢查到期時間? 還是不檢查呢?
因此,既然問題是,jwt如何檢查到期日期,它基本上取決於可以根據JWT RFC實現的某些屬性
一個就是exp
。 如果令牌在當前日期時間之前過期,則無法處理JWT
“ exp”(到期時間)聲明標識了不得接受JWT進行處理的到期時間。 “ exp”聲明的處理要求當前日期/時間必須早於“ exp”聲明中列出的到期日期/時間。
實施者可以留出一些余地,通常不超過幾分鍾,以解決時鍾偏差。 它的值必須是包含NumericDate值的數字。 此聲明的使用是可選的。
另一個要注意的是iat
,它表示在
“ iat”(發布於)聲明標識了JWT的發布時間。 此聲明可用於確定JWT的年齡。 它的值必須是包含NumericDate值的數字。 此聲明的使用是可選的。
據我所知,可以用於時間驗證的最后一個是nbf
,表示不早於
“ nbf”(不早於)聲明標識了不得接受JWT進行處理的時間。 處理“ nbf”聲明時,要求當前日期/時間必須晚於或等於“ nbf”聲明中列出的不早日期/時間。 實施者可以留出一些余地,通常不超過幾分鍾,以解決時鍾偏差。 它的值必須是包含NumericDate值的數字。 此聲明的使用是可選的。
現在,對於手頭的代碼,我看不到任何東西,進行以下設置后,對我來說一切正常
const jwt = require('jsonwebtoken');
const token = jwt.sign( {
hello: 'world'
}, 'myverysecretkey', {
expiresIn: '24h'
});
try {
const verify = jwt.verify( token, 'myverysecretkey' );
console.log( verify );
} catch (err) {
console.error( err );
}
將輸出
Object {hello: "world", iat: 1557840459, exp: 1557926859}
可以在codeandbox鏈接上對此進行驗證
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.