JWT token 如何實現註銷或登出

可能的解決方案:

  • 將JWT存儲在數據庫中。您可以檢查哪些令牌有效以及哪些令牌已被撤銷,但這在我看來完全違背了使用JWT的目的。
  • 從客戶端刪除令牌。這將阻止客戶端進行經過身份驗證的請求,但如果令牌仍然有效且其他人可以訪問它,則仍可以使用該令牌。這引出了我的下一點。
  • 令牌生命週期短。讓令牌快速到期。根據應用,可能是幾分鐘或半小時。當客戶端刪除其令牌時,會有一個很短的時間窗口仍然可以使用它。從客戶端刪除令牌並具有短令牌生存期不需要對後端進行重大修改。但是令牌生命週期短意味着用戶因令牌已過期而不斷被註銷。
  • 旋轉代幣。也許引入刷新令牌的概念。當用戶登錄時,爲他們提供JWT和刷新令牌。將刷新令牌存儲在數據庫中。對於經過身份驗證的請求,客戶端可以使用JWT,但是當令牌過期(或即將過期)時,讓客戶端使用刷新令牌發出請求以換取新的JWT。這樣,您只需在用戶登錄或要求新的JWT時訪問數據庫。當用戶註銷時,您需要使存儲的刷新令牌無效。否則,即使用戶已經註銷,有人在監聽連接時仍然可以獲得新的JWT。
  • 創建JWT黑名單。根據過期時間,當客戶端刪除其令牌時,它可能仍然有效一段時間。如果令牌生存期很短,則可能不是問題,但如果您仍希望令牌立即失效,則可以創建令牌黑名單。當後端收到註銷請求時,從請求中獲取JWT並將其存儲在內存數據庫中。對於每個經過身份驗證的請求,您需要檢查內存數據庫以查看令牌是否已失效。爲了保持較小的搜索空間,您可以從黑名單中刪除已經過期的令牌。(根據令牌剩餘有效期設置內存數據失效時間,達到自動清除的目的)

本人感覺最後一條會是比較完美的方案!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章