繁体   English   中英

如何在不登录的情况下保护仅来自Android应用程序到服务器的Web服务

[英]How to secure web services coming from only android app to server without login

IOS已经问过这种问题, 如何无需登录即可保护Web服务

但是,如果没有用户身份验证,我仍然找不到能够使Web服务安全的解决方案。 到目前为止,我有专门为android应用制作的网络服务。 我希望所有的api命中仅应从我的android应用程序发送到服务器。 没有人破解它并从restclient或postman命中api。 服务器将如何明确识别该请求来自android应用程序,并明确做出响应。

我认为方法1确实会生成一个api密钥,并将该api密钥发送到可以在服务器端进行验证的请求标头中。 如果密钥匹配,则服务器可以假定该请求来自列入白名单的android应用。 但是问题是密钥必须存在于android应用程序中,该应用程序很容易反编译并可以被黑客入侵。 攻击者在获取密钥后可能会直接从那里的app / web / ios rest客户端发送api请求。

方法2即使在共享首选项中,Api密钥也很容易被盗。 因此,我使用无法反编译的jni将其保留在本机代码中,但可以将其反汇编并从那里读取密钥。 因此,将密钥保持在apk之内是不安全的。 因此这种方法失败了。

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

黑客将调用Api发送加密密钥以及url,并获得实际的密钥作为响应,然后该密钥可在任何地方使用。 因此,问题是如何保护它,以便没有登录就没有人可以利用资源。 我必须确保点击仅来自应用。

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

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

在任何情况下,无需提供可验证令牌正确性的第三方服务,即可轻松破解android应用。您别无选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM