2017-02-21 21 views
0

这类问题已经被问IOS How To Secure Web Service Without Login如何安全的Web服务只从Android应用程序来服务器,而无需登录

但还是我没能找到解决方案,以无需用户的Web服务安全认证。 我有一个专门为android应用程序制作的web服务,截至目前。我希望所有的API应该只从我的Android应用程序到服务器。没有人破解它,并从restclient或postman中获取api。 服务器将如何识别来自android应用程序的请求,并据此进行响应。

方法1 我以为生成一个API密钥,并发送请求头中的API密钥,可以在服务器端验证。如果密钥匹配,则服务器可以假定请求来自白名单的android应用程序。但问题是,必须在android应用程序内部存在密钥,这可以很容易地反编译并且可以被黑客入侵。攻击者可以在获得密钥后直接从app/web/ios rest客户端发送api请求。

方法2 即使保存在sharedprefernce中,Api key也很容易被盗。所以我把它保存在使用jni的本地代码中,这些代码无法被反编译,但是这些代码可以被解密并且可以从那里读取密钥。所以保持apk内的密钥是不安全的。所以这种方法失败了。

方法3 我以为最初不会保留原始密钥。但要使用不对称密钥。私钥保存在服务器上,从公钥生成的加密密钥保存在android应用中。 将API作为加密密钥进行输入调用,服务器使用私钥对API密钥进行解密并返回该密钥作为响应。该密钥保存在应用程序范围中,并用于随后请求该密钥在标头中发送。所以从现在起,请求变得不安全,因为攻击者不知道原始密钥。但问题就来了这里 是 加密密钥+ 1 API中的APK暴露

黑客会调用API发送与URL一起加密的密钥,并得到响应的实际键,然后该键可以在任何地方使用。所以问题是如何保护它,以便没有人可以在没有登录的情况下利用资源。我必须确保点击仅来自应用程序。

方法4它需要登录谷歌提供的JWT Id令牌,可以很容易地在服务器端进行验证。但我不希望用户使用Google登录。只是知道请求只来自android应用程序。

回答

1

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

在任何情况下,Android应用程序可以在不具有验证token.You的正确性没有选择第三方服务很容易被黑客入侵。

相关问题