簡體   English   中英

如何保護我的REST-API?

[英]How to secure my REST-API?

我有一個帶有node.js和express.js的api構建。 現在我有一個不安全的api,任何人都可以獲取,發布,刪除,刪除記錄。

我正面臨以下問題。 我的其他api不應該驗證用戶而是應用程序。 例如,我的移動應用程序應該有一個有效的令牌來訪問api。 Web應用程序也是如此。

另一個用戶案例:我的api將被另一個只使用一次休息呼叫的應用程序使用。 所以代碼中的某個地方我不知道在一個應用程序中我不知道(大多數情況下)我的api上的休息調用將被觸發。 如何保護此類訪問權限,因為不涉及cookie或會話?

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

用戶名和密碼,會話令牌和API密鑰不應出現在URL中,因為這可以在Web服務器日志中捕獲並使其具有內在價值。

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

有什么建議嗎? 我讀到了oauth,但這涉及重定向,我無法想象這將如何適用於移動應用程序,例如在Android上。

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

有很多關於在應用程序中使用rsa的文章,我相信如果你只是谷歌,你將能夠找到更明確的解釋如何使用它。

編輯
我剛剛碰到這篇文章 ,對這個問題有更詳細的描述。

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

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

而不是用戶名/密碼,順便說一句,只需使用“訪問令牌”,這是一個很長的(讀取:難以猜測)字符串,並為每個應用程序分配一個訪問令牌。 最后,您將有效令牌列表保留在數據庫中,並對其進行身份驗證。 如果您願意,您甚至可以將過期日期附加到這些字符串。

將訪問令牌添加為https:// url的一部分是常見做法。

暫無
暫無

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

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