2013-10-05 182 views
3

我有一個API,建立與node.js的& express.js。現在我有一個不安全的API,任何人都可以GET,POST,PUT,DELETE記錄。如何保護我的REST-API?

我面臨以下問題。我的休息API不應該認證用戶,但應用程序。例如。我的移動應用程序應該有一個有效的令牌來訪問api。相同的Web應用程序。

另一個用戶案例:我的API將只使用一個單一的REST調用其他應用程序使用。因此,在我不知道的應用程序中的某處(大部分情況下),會觸發我api上的其餘呼叫。我怎樣才能保證這種訪問,因爲不涉及cookies或會話?

我的第一個想法是,創建一個用戶和密碼。每個API調用(通過https)都必須包含憑據。密碼可能被散列。但是我讀這

用戶名和密碼,會話令牌和API密鑰在URL中不應該出現 ,因爲這會導致Web服務器日誌被捕獲,並讓他們 內在價值。

https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

對此有何建議?我閱讀了oauth,但這涉及重定向,我無法想象這將如何與移動應用程序協同工作,例如在Android上。

回答

2

您可以使用此RSA加密,看看ursa模塊節點。
使用這個過程的簡化過程是...安排您的客戶端應用程序使用公鑰對服務器端的密碼進行加密,並在服務器端使用私鑰對其進行解密,檢查密鑰是否符合您的期望並採取相應措施。 。

有很多關於應用使用RSA的文章,我相信你將能夠拿起如何工作的,如果你只是谷歌更明確的解釋。

編輯
我剛纔碰見this post這對這一問題作出更詳細的寫了。

2

有一個應用程序如何首先知道用戶名/密碼的問題,但如果您對一般想法(這是安全的,只要您考慮運行應用程序的環境爲了安全起見),那麼你不需要擔心URL中的用戶名/密碼:只需使用https而不是https。

HTTPS加密,因此只有2個端點(客戶端和您的API)可讀取甚至URL。任何路由器/代理/服務器之間只能看到加密數據,並且無法訪問您的用戶名/密碼。

取而代之的用戶名/密碼,順便說一句,只需使用一個「訪問令牌」,這是一個長期的(讀:很難猜)字符串,並指定每個應用程序一個訪問令牌。最後,您將有效令牌的列表保存在數據庫中,並進行身份驗證。如果您願意,您甚至可以將有效期限附加到這些字符串。

將訪問令牌作爲https:// url的一部分添加是常見操作。