首页 文章

Node.js表达,请求jwt令牌 - 如果在请求中过期,如何正确获取新的有效令牌

提问于
浏览
1

成功登录后,我将返回的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 回答

  • 0

    我想你正试图用JWT令牌实现auth0 . 最佳做法是在登录时始终返回2个令牌:

    • access_token(使用JWT):JWT的好处是服务器不需要查询回数据库来验证并获取有关正在调用API的用户的信息

    • refresh_token:当access_token过期时,这对用户重新生成令牌很有用 .

    在客户端应用程序中,您应该始终保存2个令牌 . 在调用任何API之前,您应该检查JWT是否已过期 . 可以使用 jwt.decode() 轻松完成 . 过期的信息通常存储在 expiat 键中 . 如果它已过期,则需要在调用实际API之前调用API以重新生成令牌 .

    你可以在这里找到一个例子:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

    希望这可以帮助 .

相关问题