2016-01-04 33 views
9

使用Facebook身份驗證的PassportJS足夠用於帶有Node JS的iOS後端嗎?身份驗證(Passport)足以安全使用Node js後端服務器嗎?

我有toobusy包,以及當事情變得繁忙時拒絕請求(我猜這對DDOSes很有用)。

我正在考慮使用nginx作爲我的Node.JS服務器的反向代理。

有哪些更安全的措施可以擴展?一些建議和提示?任何有關我應該關注PassportJS的身份驗證會話無法處理的安全問題?

回答

6

這是一個有點硬,在一個後所有與安全相關的最佳實踐死記硬背,而是爲它的值得,這是我對這個問題的看法。

提供認證和保護它是兩個單獨的事情。 PassportJS將能夠處理與身份驗證相關的所有內容,但這是完全不同的事情,防止它被愚弄或淹沒。

把PasswordJS放在一個反向代理(RP)後面的一個(大的)原因是,你將能夠爲與HTTP相關的任何事情提供第一道防線:頭部/身體長度/數據,允許的方法,重複/不需要的頭文件等等。

Nginx/Apache/HAProxy都提供了很好的工具來處理這些情況,而且您還可以很好地分離關注點:讓反向代理處理安全性並讓PassportJS處理認證。架構方面,它也會更有意義,因爲您可以隱藏PassportJS節點的數量和基礎結構。基本上,你想讓它看起來像你的客戶只有一個入口點。這種體系結構的擴展也更容易。與往常一樣,確保RP(s)保持儘可能少的狀態,最好沒有,以便線性縮放。

爲了正確配置您的RP,您需要真正瞭解PassportJS的協議(如果您想提供更多身份驗證方法而不僅僅是Facebook)的工作方式。知道這一點,您可以將您的RP設置爲:

  • 拒絕任何不允許的請求HTTP方法(TRACE,OPTION,PUT,DELETE等)。
  • 拒絕大於已知大小的請求/標頭/有效負載。
  • 負載均衡您的PassportJS節點。

有關負載平衡方面的一件事是粘性會話。一些認證者將他們所有的狀態存儲在一個加密的cookie中,另一些則是一個簡單的會話句柄,只有創建會話的節點才能理解。因此,除非您爲後一種類型啓用了會話共享(如果您需要PassportJS彈性),則需要配置RP以處理粘滯會話。這應該是他們應該處理的最大狀態量。配置正確,如果需要重新啓動RP,甚至可能會工作。

正如您勤勉指出的那樣,toobusy(或同等產品)應具備處理節流的功能。根據我的經驗,HAProxy在調節方面比其他RP更容易處理,但toobusy應該也可以正常工作,尤其是如果您已經熟悉它的話。

另一件可能會或可能不會控制的事情是網絡分區。顯然,RP需要可訪問,但它們應該充當PassportJS節點的中繼。如果可能的話,最佳做法是將身份驗證節點放置在與後端服務器分開的網絡/ DMZ上,以便通過RP不能直接訪問它們。如果妥協,他們不應該被用作後臺/內部網絡的墊腳石。

+0

感謝您的回答,丹尼爾! – Lucky

2

按照Passport文檔: 「支持使用用戶名和密碼,Facebook,Twitter等認證。」

它是中間件,通過它可以將多種類型的安全方法與NodeJS集成在一起。

您應該考慮應用程序的目的,它是否僅支持Facebook身份驗證或自定義註冊/登錄過程。如果它提供第二種選擇,那麼在這種情況下,最好不要依賴任何社交網站(如Facebook/Twitter或其他)的authtoken。

更好的選擇是創建自己的令牌,如JWT令牌,並將其與來自多個平臺的用戶綁定。它將幫助您擴展項目的範圍,以整合其他社交網站。

以下是將JWT集成到NodeJS中的鏈接。

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

同樣也有在市場上的許多其他博客和教程,智威湯遜用的NodeJS

整合
+0

感謝您的回答,Ankit – Lucky