成功登录后,我将返回的JWT令牌存储在Session中 . 然后在我的搜索路径中,我正在从会话中使用jwt令牌访问api并在头部中设置如下:
router.post('/search', (req, res) => {
var getToken = req.session.APIToken;
var auth = 'Bearer '+getToken;
request.get({
headers: {
"authorization": auth
},
url: "localhost/abc/search?name=peter"
}, (error, response, body) => {
if(error) {
return console.dir(error);
}
var jsonBody = JSON.parse(body);
if(jsonBody.status === 200) {
console.log('Request successful!');
}
if(jsonBody.success === false) {
/// ??? BUT what if the JWT token is expired! How do I properly refresh or get a new valid jwt token here? ///
console.log('Token expired!');
}
});
});
但是如果JWT令牌过期了怎么办!如何正确刷新或获取新的有效jwt令牌?
我想使用回调函数使用会话中保存的电子邮件和密码?但是我该如何准确地做到这一点或者最好的方法是什么?
编辑:我有两个应用程序...一个前端应用程序...和一个单独的API应用程序 . 因此,登录时...我通过前端应用程序登录,但从API应用程序获取JWT令牌 . 来自前端应用程序的登录会话是360s ... JWT令牌在60年代有效....所以如果JWT令牌在用户执行搜索请求时过期...我想自动生成一个新令牌完成请求 .
1 回答
我想你正试图用JWT令牌实现auth0 . 最佳做法是在登录时始终返回2个令牌:
access_token(使用JWT):JWT的好处是服务器不需要查询回数据库来验证并获取有关正在调用API的用户的信息
refresh_token:当access_token过期时,这对用户重新生成令牌很有用 .
在客户端应用程序中,您应该始终保存2个令牌 . 在调用任何API之前,您应该检查JWT是否已过期 . 可以使用
jwt.decode()
轻松完成 . 过期的信息通常存储在exp
或iat
键中 . 如果它已过期,则需要在调用实际API之前调用API以重新生成令牌 .你可以在这里找到一个例子:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
希望这可以帮助 .