簡體   English   中英

Node Express-身份驗證令牌的存儲和檢索

[英]Node Express - Storage and retrieval of authentication tokens

我有一個Express應用程序設置,需要一些有關存儲令牌的建議。

驗證用戶帳戶后,我正在從OAuth 2服務器接收訪問令牌,然后我需要將其用於后續的api請求。

我想向客戶端隱藏令牌值,並且我相信這樣做的一種方法是將令牌保存在服務器上的已編碼cookie中,以便在發出進一步請求時,這些請求可以通過中間件進行路由,然后可以通過cookie用於檢索存儲在服務器端的令牌,然后用作對實際api端點的正在進行的請求中的標頭值。

實際上有人已經問過這個問題- 如何在Angular應用程序中存儲身份驗證令牌這正是我在應用程序中使用的流程,但是答案是關於使用Angular服務的,我不確定我是否願意為此,請確保Express可以全部處理,因此客戶端代碼無需了解令牌,只需知道API服務器返回的任何錯誤即可。

因此,我認為我需要流程摘要:

  • 用戶提交登錄憑證
  • OAuth 2服務器返回訪問令牌
  • 令牌保存在Express中的某個位置,並由各種ID進行鍵控
  • 生成cookie並將其發送回客戶端。 Cookie可能包含編碼的令牌值? 還是存儲在Express中間件組件中的令牌值的ID?
  • 客戶端發出一個api請求,Express路由中間件選擇該請求。
  • Express檢查cookie的存在並解碼令牌值,或以某種方式從存儲機制服務器端檢索。
  • 然后將令牌值用作express和最終api端點之間的標頭

可能已經有中間件可以處理這種事情,我已經看過PassportJS了,這似乎是我可能要使用的一種東西,但是我不確定它可以處理我正在工作的服務器上的OAuth2令牌流反對(密碼授予),而似乎更適合於重定向登錄OAuth流。

我肯定需要將令牌值保存在Express中的某個地方,以便以某種形式的存儲(我不認為不是在內存中)。

我對Express來說還很陌生,因此希望您對如何解決此問題提供任何建議。

謝謝

最為安全的方法就是您所描述的:

  • 從某些第三方服務(Google,Facebook等)獲取OAuth令牌。
  • 使用Express創建一個cookie,並將該令牌存儲在cookie中。 請確保在執行此操作時還設置了securehttpOnly cookie標志:這確保httpOnly通過客戶端Javascript代碼或任何非SSL連接讀取cookie。
  • 每次用戶向您的站點發出請求時,該cookie都可以由Express中的中間件讀取,並用於對第三方服務進行您需要的任何API調用。

如果您的服務還需要向Google / Facebook等發出異步請求,而當用戶沒有主動點擊您的網站時,您也應該將其令牌存儲在用戶數據庫中的某個位置,這樣您就可以在在需要時代表用戶。

我是Express-stormpath (Node身份驗證庫)的作者(類似於Passport),這就是我們在那做的事情,以確保最大的安全性!

暫無
暫無

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

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