![](/img/trans.png)
[英]How can I stop my android app from force closing when it cant connect to my server?
[英]How can I prevent anyone from communicating with my server except my Android app
我在Google應用引擎上安裝了休息服務器,我只希望我的應用能夠撥打我的服務器。
我可以在谷歌應用程序引擎上打開一個安全選項來實現這個目標嗎? 如果不是我能做什么?
我知道您可以通過以下方式限制對某些頁面的訪問,但我不確定它是否可以應用於REST調用
<security-constraint>
<web-resource-collection>
<url-pattern>/cron/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
在openssl中生成privatekey / publickey對。 在應用程序分發中分發公鑰。 有一個名為appName的自定義http標頭,並加密appname(一個唯一的常量不可預測位大號)並發送它。 確保您的代碼經過混淆,以便沒有人能夠查看appname。 然后,即使有人跟蹤http調用,您也在進行加密,因此appname將顯示為加密值。 在服務器端使用私鑰解密appname。 希望這可以幫助。
(已經有三個答案,並且在這個問題上我都有不同的想法 - 所以我認為這是一個很好的問題。)
我的理解是這樣做(谷歌)的推薦/規范方式是OATH2。 谷歌已經認識到OATH2很棘手,他們嘗試簡單的就是雲端點,以及針對Android客戶端的Google Play服務。 有關這方面的說明如下:
請注意,雖然文檔強調用戶身份驗證,但它也支持應用程序身份驗證。
我不知道(但是想)是非端點應用程序如何做同樣的事情,所以我想這只是一個部分答案。
簡短的回答是,你不能,至少不是完全安全。
答案很長,你可以讓黑客很難。 通常,這通過在應用程序中嵌入密鑰,對其進行模糊處理以及對獲取密鑰的代碼進行模糊處理來實現。 這並不能讓某人找到鑰匙,只是更難。
其中一個更強大的消費者系統是微軟的Silverlight DRM,你可能想調查它是如何工作的: http : //www.iis.net/learn/media/iis-media-services/content-protection-in-silverlight
您可以在訪問時使所有REST服務都需要訪問密鑰和密鑰。 然后,應用程序可以將這些存儲在配置設置下,並在發送到App Store時保留為空白。
然后,當您下載應用程序時,您可以進入配置設置並插入您為REST服務設置的密鑰和密鑰。 (這樣可以防止任何人訪問服務,因為您手動添加了所使用的Key + Secret)
我建議在服務器上設置所有未經授權的訪問嘗試的IP日志,這樣如果有人通過無效訪問嘗試向您的Web服務發送垃圾郵件,您就可以創建黑名單。
然后最重要的是你可以通過HTTPS完成這一切。
選項很少:
執行此操作的規范方法是使用SSL和客戶端證書。 我不確定App Engine是否支持此功能。
但請注意,如果您正在分發您的APK,那么您不能僅依賴於隨APK分發的任何內容 - 這是可能的(如果不太可能,取決於您作為目標的高調)提取欺騙應用程序所需的任何信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.