Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我有一个需要调用 API 的 Android 应用程序。我想对部署的应用程序进行身份验证,以确保未经授权的客户端无法使用我的 API。
我可以在应用程序中放入任何东西——对请求进行签名的 HTTP 标头,以及随机数。但是,如果有人反编译应用程序,他将能够复制身份验证方法,例如生成签名和共享密钥的算法。对于 Java 和 Android,这并非不可行。
有没有可能避免?可能不是,但我想确定密码学没有适合我的解决方案。
这个问题没有解决办法。您的服务器不可能知道它正在与“您的”客户端交谈。您唯一可以合理验证的是用户,而不是应用程序。也可以合理地验证某些安全的硬件设备,但是这样做非常昂贵,并且仍然不能确保您的客户端正在被使用;它仅表明用户可以访问您的安全硬件设备之一。
这已在 SO 中多次讨论过。这些帖子讨论了这个问题并链接到更多这些讨论:
虽然上面的帖子是根据 iOS 设计的,但这个问题是普遍存在的。