簡體   English   中英

Node.js JWT令牌

[英]Node.js JWT token

我想使用令牌jwt在node.js中創建一個api。

  1. 我有一個使用登錄名和密碼登錄的用戶,成功登錄后會生成一個令牌,並將該令牌寫入該用戶的數據庫中。
  2. 如果給定的用戶發送請求,例如GET / basic-data,則我必須執行中間件,該中間件將檢查標頭中的令牌是否與數據庫中的令牌相同。

我說對了嗎?

這個答案的目的只是涉及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.

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