2017-12-02 194 views
0

想象下面的場景:處理用於扣除積分(金錢)的客戶端API密鑰

我已經構建了一個API和一個Web應用程序。用戶將通過網絡應用程序註冊並獲得唯一的API密鑰。然後他們可以爲他們的賬戶購買「信用」,這只是美元的1:1表示。

當用戶執行API調用時,他們傳入其API密鑰。該密鑰用於識別客戶,並根據需要減去積分。

這裏有一個明顯的問題。如果用戶從他們自己的服務器執行此調用,並且密鑰保持私密狀態,則一切正常。但是,我將如何處理沒有自己的服務器的客戶?例如,將發佈了簡單Android應用的用戶帶到Play商店,而不需要服務器,並且想要集成我的產品。關鍵是必須保持客戶端。惡意用戶可能會對應用程序進行反混淆處理,並有可能執行未經授權的API調用,使用密鑰所有者的信用。

這個問題怎麼解決?有什麼辦法來處理這種情況?

回答

0

問題的一個顯而易見的解決方案(通常)是擁有一個管理API密鑰的服務器(因此不允許直接移動應用程序 - > API訪問)。這樣,中間服務器將管理API密鑰,對於中間應用程序的所有調用者而言,API密鑰可以相同或不同。此應用程序可以對其調用者進行身份驗證,並可能根據登錄的用戶決定使用哪個API密鑰。這可能會非常容易出錯,尤其是從長遠來看,如果多人或團隊開發它的話。此外,這只是進一步解決問題。 :)

但是,說你想要一個移動應用程序能夠安全地與API交談。爲什麼密鑰必須在應用程序中進行硬編碼?

對此的標準解決方案是下載應用程序的用戶在運行時從API獲取自己的API密鑰。所以沒有設置密鑰,因爲你在API方面不知道你的用戶是誰。一旦有用戶(從移動應用程序或其他任何應用程序)創建一個API密鑰,移動應用程序就可以按照自己的需要存儲它(這是一個可以蠕動的蠕蟲,長話短說,在移動平臺的證書商店中是最好的)。

您的困惑可能來自於未決定API密鑰的確切內容。如果它是一個用戶(最終用戶有自己獨特的API密鑰),那麼就像上面描述的那樣,他們應該單獨獲得他們的密鑰。另一方面,如果API密鑰標識你的客戶端(移動應用程序製造商),那麼他們需要一個服務器,否則它將不安全。