這類問題已經被問IOS How To Secure Web Service Without Login如何安全的Web服務只從Android應用程序來服務器,而無需登錄
但還是我沒能找到解決方案,以無需用戶的Web服務安全認證。 我有一個專門爲android應用程序製作的web服務,截至目前。我希望所有的API應該只從我的Android應用程序到服務器。沒有人破解它,並從restclient或postman中獲取api。 服務器將如何識別來自android應用程序的請求,並據此進行響應。
方法1 我以爲生成一個API密鑰,併發送請求頭中的API密鑰,可以在服務器端驗證。如果密鑰匹配,則服務器可以假定請求來自白名單的android應用程序。但問題是,必須在android應用程序內部存在密鑰,這可以很容易地反編譯並且可以被黑客入侵。攻擊者可以在獲得密鑰後直接從app/web/ios rest客戶端發送api請求。
方法2 即使保存在sharedprefernce中,Api key也很容易被盜。所以我把它保存在使用jni的本地代碼中,這些代碼無法被反編譯,但是這些代碼可以被解密並且可以從那裏讀取密鑰。所以保持apk內的密鑰是不安全的。所以這種方法失敗了。
方法3 我以爲最初不會保留原始密鑰。但要使用不對稱密鑰。私鑰保存在服務器上,從公鑰生成的加密密鑰保存在android應用中。 將API作爲加密密鑰進行輸入調用,服務器使用私鑰對API密鑰進行解密並返回該密鑰作爲響應。該密鑰保存在應用程序範圍中,並用於隨後請求該密鑰在標頭中發送。所以從現在起,請求變得不安全,因爲攻擊者不知道原始密鑰。但問題就來了這裏 是 加密密鑰+ 1 API中的APK暴露
黑客會調用API發送與URL一起加密的密鑰,並得到響應的實際鍵,然後該鍵可以在任何地方使用。所以問題是如何保護它,以便沒有人可以在沒有登錄的情況下利用資源。我必須確保點擊僅來自應用程序。
方法4它需要登錄谷歌提供的JWT Id令牌,可以很容易地在服務器端進行驗證。但我不希望用戶使用Google登錄。只是知道請求只來自android應用程序。