Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不登录的情况下保护仅从android应用程序到服务器的web服务_Java_Android_Rest_Security_Authentication - Fatal编程技术网

Java 如何在不登录的情况下保护仅从android应用程序到服务器的web服务

Java 如何在不登录的情况下保护仅从android应用程序到服务器的web服务,java,android,rest,security,authentication,Java,Android,Rest,Security,Authentication,这种问题已经被问到了 但我仍然无法找到解决方案,在没有用户身份验证的情况下使web服务安全。 到目前为止,我有一个专门为android应用程序制作的web服务。我希望所有的api命中应该只从我的android应用程序到服务器。没有人破解它,从restclient或postman访问api。 服务器将如何识别来自android应用程序的请求(明确地说是已开发的应用程序)并做出相应的响应 方法1 我想生成一个api密钥,并将该api密钥发送到请求头中,请求头可以在服务器端进行验证。若密钥匹配,那个

这种问题已经被问到了

但我仍然无法找到解决方案,在没有用户身份验证的情况下使web服务安全。 到目前为止,我有一个专门为android应用程序制作的web服务。我希望所有的api命中应该只从我的android应用程序到服务器。没有人破解它,从restclient或postman访问api。 服务器将如何识别来自android应用程序的请求(明确地说是已开发的应用程序)并做出相应的响应

方法1 我想生成一个api密钥,并将该api密钥发送到请求头中,请求头可以在服务器端进行验证。若密钥匹配,那个么服务器可以假定请求来自白名单上的android应用程序。但问题是,密钥必须存在于android应用程序中,该应用程序可以轻松反编译并被黑客攻击。获取密钥后,攻击者可能会直接从app/web/ios rest客户端发送api请求

方法2 Api密钥即使保存在SharedPreference中也很容易被盗。所以我使用jni将其保存在本机代码中,jni不能被反编译,但代码可以被分解,密钥可以从那里读取。因此,将密钥保持在apk内是不安全的。因此,这种方法失败了

方法3 我想最初不要将原始密钥保存在应用程序中。但是要使用非对称密钥。私钥保存在服务器上,由公钥生成的加密密钥保存在android应用程序中。 调用API时,输入为加密密钥,服务器使用私钥解密API密钥,并返回该密钥作为响应。该密钥保存在应用程序作用域中,对于随后的请求,该密钥在头中发送。所以,从现在起,请求变得不安全,因为攻击者不知道原始密钥。但问题来了 那个 加密密钥+第一个api在apk中公开

黑客将调用Api发送加密密钥和url,并得到实际密钥作为响应,然后该密钥可以在任何地方使用。所以,问题是如何保护它,使任何人都无法在未登录的情况下利用这些资源。我必须确保点击量仅来自应用程序


方法4需要使用google登录,并提供JWT Id令牌,该令牌可在服务器端轻松验证。但我不希望用户登录谷歌。只是想知道请求只来自android应用程序。

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


在任何情况下,android应用程序都很容易被黑客攻击,而无需第三方服务来验证令牌的正确性。您别无选择。

您对答案满意吗?我想你不会的。我也是。你能分享一下你在这方面的研究吗。你最后选择的解决方案是什么?读一读