如何在没有登录的情况下仅从Android应用程序到服务器保护Web服务



已经要求iOS提出这种问题 如何在没有登录的情况下保护Web服务

,但我仍然无法找到解决方案以使Web服务无需用户身份验证。到目前为止,我拥有专门为Android应用程序提供的Web服务。我希望所有的API命中都应该仅从我的Android应用程序到服务器。没有人会破解它,并从RESTCLIENT或POSTMAN中击中API。服务器将如何识别该请求来自Android应用程序,并解释了开发的请求并做出相应的响应。

方法1我认为确实会生成一个API键,并在请求标头中发送该API键,该键可以在服务器端进行验证。如果密钥匹配,则服务器可以假设请求来自白名单Android应用程序。但是问题在于,必须在Android应用程序中存在密钥,该应用程序可以很容易地将其分解并可以被黑客入侵。攻击者可以在获取密钥后直接从那里的应用程序/Web/iOS REST客户端发送API请求。

方法2API密钥甚至可以被偷走,甚至可以保存在共享prefernce中。因此,我使用无法分解的JNI将本机代码保留在本机代码中,但是可以将代码删除,并且可以从那里读取键。因此,将密钥保持在APK中是不安全的。因此,这种方法失败了。

方法3我认为最初不将原始密钥保留在内部应用程序内部。但是使用不对称的键。将私钥保存在服务器上,并加密从公共密钥生成的密钥保存在Android应用中。使用私有密钥调用输入为加密键,而服务器解密API密钥,并返回该键响应中的API。该密钥保存在应用程序范围内,并随后要求将密钥发送到标题中。因此,从现在开始,请求就变得不受欢迎,因为攻击者不知道原始密钥。但是问题来了那在APK

中暴露了加密的键 1st API

hacker将与URL一起调用API发送加密键,并获取响应中的实际键,然后可以在任何地方使用该键。因此,问题是如何保护它,以便没有人可以在没有登录的情况下利用资源。我必须确保仅来自应用程序。

方法4需要使用Google登录,提供JWT ID令牌,可以在服务器端轻松验证。但是我不希望用户使用Google登录。只是知道请求仅来自Android应用。

我恐怕唯一可能的安全选项是选项4。

在任何情况下,Android应用都可以在没有第三方服务的情况下轻松入侵它可以验证令牌的正确性。您没有选择。

最新更新