2015-04-12 61 views
0

我一直在調查這幾天,並遇到很多SO問題,但我仍然不太確定。內部REST API安全

我正在用Node.js創建一個REST API,它將用於Web應用程序和移動應用程序,該應用程序僅用於應用程序的後端而不用於其他開發人員。

我目前的擔心是安全我知道還有其他方式,如OAuth等,但我想知道如果我目前的方法是足夠安全的。

「客戶端」使用Node中的crypto.createHmac('text', 'secret');方法創建HMAC-SHA1令牌,該方法包含一個API密鑰和一個祕密。祕密內置於代碼中,而當用戶登錄該應用程序時,先前已從數據庫中檢索到API密鑰。客戶端然後發送此令牌以及用戶ID。

然後,REST服務器檢索已發送的用戶ID的API密鑰,然後使用剛剛檢索到的API密鑰和祕密創建HMAC-SHA1標記。然後它檢查它們是否相同,然後繼續處理請求。

我不介意它是否「重新發明輪子」或其他什麼,它更多的是體驗。如果這種方法不安全,我想知道爲什麼。

+0

我不確定HMAC步驟甚至是必要的。除非您期望入侵者能夠竊聽您可能加密的服務器到服務器通信,爲什麼不將您的共享密鑰和API令牌作爲消息的一部分發送? –

+0

@AndrewLavers是的,我想知道是否需要hmac,這只是我在研究時看到的幾次彈出。只是這個話題非常有見地,而且很難找到真正需要的內容,而不是過度警惕。 – Emobe

+0

@AndrewLavers雖然我很想知道它會被移動應用程序訪問,但他們能夠讀取共享密鑰嗎? – Emobe

回答

3

沒有客戶端設備的物理安全性(即:您擁有硬件),沒有完美的安全性。擁有客戶端設備的人總是能夠找到你的祕密,所以不要太擔心。使用您的HMAC來掩蓋網絡代理的祕密。

即使使用OAUTH,客戶端密鑰也可能被盜用。

您可以通過要求驗證爲用戶提供安全性。聽起來你已經這麼做了。所以我認爲你很好。

也就是說,作爲一般規則,我更喜歡使用現有的協議和庫,而不是實現自己的協議和庫。他們往往有更安全的實施。