[英]How to handle JWT token on the client site in Node.js application?
[英]Node.js JWT token
我想使用令牌jwt在node.js中創建一個api。
我說對了嗎?
這個答案的目的只是涉及Web應用程序中通常如何使用JWT的高級基礎知識。 你說:
成功登錄后,我生成一個令牌,並將其寫入該用戶的數據庫。
正確的做法是,成功登錄后,您的Node應用程序應生成一個新的JWT,但是將其寫入數據庫中並不常見。 使用JWT的全部目的是從服務器端刪除盡可能多的狀態,然后使用應用程序將其推送給客戶端。 由於多種原因,將會話狀態存儲在數據庫中並不理想,其中包括與諸如高速緩存之類的替代方法相比,數據庫訪問往往非常流暢。
接下來,您問:
如果給定的用戶發送請求,例如GET / basic-data,則我必須執行中間件,該中間件將檢查標頭中的令牌是否與數據庫中的令牌相同。
在理想情況下,對於每個請求,您只需要檢查傳入的JWT的到期聲明( exp
),即可決定是否滿足該請求。 您無需檢查數據庫。 實際上,您可能必須維護JWT的白名單或黑名單緩存,但理想情況下,任何緩存的內存占用量都將很小,並且訪問時間將非常快。
不,您沒有利用JWT令牌的用途。 您無需將JWT令牌存儲在數據庫中。 您生成的令牌附帶您在創建令牌時指定的到期時間。 您只需要使用預定義的函數(在jwt庫中可用)就可以驗證令牌是否有效以及有效負載是否包含已驗證的數據。
要檢查負載的真實性,您可以編寫一個策略,該策略將在命中URL時檢查令牌,然后轉發請求以進行進一步處理。
例如,您可以在創建jwt令牌時將用戶數據轉儲到jwt負載中,一旦在任何請求中獲得了令牌,就可以通過以下方式檢查資源是否由經過身份驗證的用戶請求(例如:user role = admin或vendor)調查您的用戶數據庫。 該策略將在此處充當中間件。
為什么將JWT存儲在數據庫中。如何找到同一用戶正在向您提供的令牌發送此令牌。 您可以使用令牌的verify()方法驗證令牌,然后在數據庫中檢查已解碼的用戶詳細信息,以確認該用戶的有效性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.