簡體   English   中英

當到期時間為24h時,jwt.verify()返回jwt到期

[英]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.

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