簡體   English   中英

如何防止其他iOS / Android應用程序使用我的RESTful API?

[英]How can I prevent other iOS/Android apps from using my RESTful API?

我有一個預先存在的iOS和Android應用程序,我正在進行更新,其中包括RESTful服務API和用於身份驗證的Facebook登錄。 該應用程序的一般流程是:

  1. 用戶通過Facebook的SDK“登錄”到我的應用程序,該SDK將訪問令牌返回到我的應用程序。
  2. App調用RESTful服務,包括Facebook訪問令牌作為參數(使用HTTPS和SSL)
  3. 被呼叫的服務將收到的訪問令牌(以及僅存儲在我的服務器上的應用程序秘密)發送到Facebook以驗證用戶是誰,並根據該操作執行操作。 Facebook設置為從服務器端調用需要app secret。

我的應用已經普及並且已經有幾個克隆,我想阻止這些克隆能夠使用我的RESTful API(因為我確信他們會在我發布更新時嘗試做)。 讓我們假設克隆是聰明的,使用與我的應用程序相同的Facebook訪問權限(如果可能的話),並遵循類似的模式和頻率調用我的應用程序所做的API。

無論如何,確保或幾乎確保我的服務的呼叫只來自我的應用程序,而不是克隆?

提前致謝!

您可以通過在請求中包含簽名並進行驗證來完成此操作。

應用方:

  1. 做類似的事情: signature = md5( md5(url + data) + MY_RANDOM_KEY)

  2. signature附加到數據或網址等。

  3. 發送呼叫到REST api(像往常一樣)

服務器端:

  1. 從body / url中提取signature (並從那里刪除)。

  2. 計算你認為應該是什么: signature_should_be = md5( md5(url + data) + MY_RANDOM_KEY) [請記住你已經從url / data中刪除了signature ,這樣你就可以獲得原始預哈希狀態的url / data]

  3. 驗證signaturesignature_should_be是否相等

這樣做以及SSL應該使您的API足夠安全。

你可以這樣做,因為Tommy Crush建議並在你的應用程序中添加一個秘密。 但如果你對抗聰明的對手,這可能無濟於事。 攻擊者可以反編譯您的應用程序,也可以嘗試簡單地對您的簽名算法進行逆向工程。

重要的是要記住,應用程序中存儲的任何內容都應該被視為已經被泄露,因為攻擊者可以反編譯您的應用程序並盡可能多地搜索您的代碼並從中提取他/她想要的任何內容。 您不能依賴應用程序中的任何內容來保護您的應用程序,因為攻擊者可以將其從您的應用程序中提取到他們的應用程序中。

請務必注意,您正在嘗試使用OAuth進行身份驗證,但不適用於此身份驗證。 它僅用於授權,與身份驗證不同。 授權只是讓您訪問資源,但不告訴您訪問它的人,這是您面臨的問題。 要將您的用戶作為真實用戶進行身份驗證(或盡可能接近),您需要為您的服務添加登錄服務 - 例如滾動您自己的OAuth服務器或類似服務。 然后你可以決定誰可以訪問資源,在這種情況下是你的RESTful API :)如果這比它的價值更多的工作,那么Tommy的計划是一個很好的選擇:)

在Twitter和Facebook使用的其他API上進行身份驗證的事實上的解決方案是OAuth機制。 您可以在此處找到更多詳細信息: http//en.wikipedia.org/wiki/OAuth

大多數語言都支持OAuth和外部庫。 例如,在Android上有https://github.com/wuman/android-oauth-client庫。

暫無
暫無

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

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