簡體   English   中英

Node.js表達,請求jwt令牌-如果請求中過期的話如何正確獲取新的有效令牌

[英]Node.js express, request jwt token - how to properly get a new valid token if expired in request

成功登錄后,我將返回的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令牌在60s內是有效的....因此,如果JWT令牌在用戶發出搜索請求時過期...我想自動生成一個新令牌,完成請求。

我認為您正在嘗試使用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/

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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