📅  最后修改于: 2023-12-03 15:10:51.963000             🧑  作者: Mango
在使用JWT(JSON Web Token)进行认证和授权时,很重要的一点就是要检查令牌是否过期。如果一个过期的令牌被使用,可能会导致安全问题。
常见的JWT包括3个部分:Header、Payload和Signature。其中Payload中包含了过期时间(exp)。
{
"iss": "issuer",
"sub": "subject",
"aud": "audience",
"exp": 1624610718,
"iat": 1624610118,
"data": {
"username": "john",
"isAdmin": false
}
}
在服务器端,我们可以使用以下代码来检查JWT是否过期:
function isTokenExpired(token) {
const decodedToken = jwt.decode(token, {complete: true});
const currentTime = Date.now() / 1000;
if (decodedToken.payload.exp < currentTime) {
return true;
} else {
return false;
}
}
这个函数接收一个JWT作为参数,解码Token并检查exp字段是否小于当前时间。如果小于,则说明JWT已经过期。
使用方式:
const token = 'eyJhbG...';
if (isTokenExpired(token)) {
console.log('Token is expired!');
} else {
console.log('Token is not expired!');
}
以上是在服务器端检查JWT是否过期的方法。在客户端,我们可以将JWT的exp字段保存在localStorage中,然后在每个API请求中,检查这个字段是否小于当前时间。如果小于,则说明JWT已经过期。
function isTokenExpired() {
const currentTime = Date.now() / 1000;
const exp = localStorage.getItem('exp');
if (exp < currentTime) {
return true;
} else {
return false;
}
}
以上就是在Javascript中检查JWT是否过期的方法。在使用JWT进行认证和授权时,一定要记得检查JWT是否已经过期。