【发布时间】:2015-11-19 09:21:47
【问题描述】:
有没有办法在 Java 代码中唯一标识我的 Android 应用?也许是包名和其他东西的某种组合?我知道有一种方法可以识别唯一的 Android device,但这不是我想要的。
我希望能够唯一标识我制作的我的 Android 应用,以便我可以将该信息传递给我自己的私有 RESTful API。这将允许我验证呼叫来自我的 Android 应用程序,而不是另一个未经授权的应用程序。我希望我的 RESTful API 仅适用于我制作的应用程序,因此没有人可以欺骗它或未经授权访问它。
或者这是不可能的?我只是想知道像 Snapchat 这样的应用程序是如何拥有自己的登录名的,而没有。显然有什么东西在保护它。
【问题讨论】:
-
“这将允许我验证呼叫来自我的 Android 应用程序而不是另一个”——不,它不会,因为任何人都可以将相同的信息传递给您的 REST Web 服务.例如,您可以将包名称和公共签名密钥的 SHA256 散列放在 REST Web 服务的 URL 中。其他任何人都可以通过检查 Web 流量来找到这些值,并将它们放在 REST Web 服务的 URL 中的相同位置。
-
@CommonsWare 即使你使用了 https?
-
一般来说,是的。有许多可用于 Android 的代理。许多可以拦截HTTPS。现在,理论上,如果您放入大量自己的证书验证逻辑,您可能会让某人成功窥探 HTTPS 流量有点困难。但是,通过对应用程序进行逆向工程,他们可以禁用证书验证逻辑,或者只查看您如何组装 Web 服务调用。
-
@CommonsWare 所以基本上你所说的是没有办法将你的android应用程序保护到你自己的restful api?既然.apk是可以反编译的,你最多只能把证书验证逻辑弄得很复杂,希望没有人聪明到能破译它?那么 Snapchat 或其他应用程序是如何做到的呢?
-
“所以基本上你的意思是没有办法保护你的安卓应用到你自己的restful api?” - 这完全取决于您对“安全......对您自己的宁静 api”的定义。您似乎担心其他应用程序使用该 API;对于任何客户端代码(例如,Web 浏览器中的 JavaScript),这是不可能完全防止的。 HTTP(S) 请求只是字节;任何代码都可以生成这些字节。默默无闻的安全性可能使攻击者难以确定如何生成这些字节,但它无法阻止此类使用。
标签: android restful-authentication