【发布时间】:2010-11-05 06:39:39
【问题描述】:
我的 Android 应用程序正在通过 HTTP 调用 JSON 服务,我希望只允许我的应用程序调用该服务并阻止其他应用程序。
最好的方法是什么?
我能想到的一种方法是使用私钥/公钥加密。我们可以在应用程序中安全地嵌入私钥吗?
【问题讨论】:
标签: android web-services json encryption
我的 Android 应用程序正在通过 HTTP 调用 JSON 服务,我希望只允许我的应用程序调用该服务并阻止其他应用程序。
最好的方法是什么?
我能想到的一种方法是使用私钥/公钥加密。我们可以在应用程序中安全地嵌入私钥吗?
【问题讨论】:
标签: android web-services json encryption
在您的应用中包含一些隐藏的证书/凭证,每个下载的应用都不同。然后使用这些进行身份验证。即便如此,这很容易被滥用,但你已经建立了第一道防线。
之后,尝试根据IP、凭据等,对单个客户端可以根据需要请求、限制和黑名单的比例进行限制。
【讨论】:
一旦您分发了您的应用程序,它就可以被反汇编。因此,可以提取和重用与您的应用程序一起分发的私钥。
没有完全安全的方式来做你想做的事情。但是有一些方法可以限制客户端,即使它们不是万无一失的。
最简单(也是最不安全)的方法是根据用户代理限制访问。但是任何客户端都可以伪造用户代理。
证书/加密解决方案更强大,但如上所述,证书可以从您的应用中提取。
某些应用程序在与您的应用程序相同的上下文中使用 OAuth。但 OAuth 不是为桌面(或移动)应用程序设计的,也容易受到应用程序逆向工程的影响。
您可以验证用户身份(通过用户/密码或其他标准方法)。在这种情况下,您不会基于平台进行限制。然后,您可以关闭滥用您服务的用户的帐户。这是一个安全的解决方案,但不能完全解决您的问题。
【讨论】:
最简单的方法是使用带有身份验证的 HTTPS。
已编辑:
这里的问题不是如何保护对服务器的访问,而是如何在 Android 手机上隐藏/保护凭据(密码/证书/等)。问题应该是:如何在 Android 应用中隐藏数据。
一种解决方案是使用像 ProGuard 这样的混淆器。
【讨论】: