android应用和服务器之间的安全验证过程

时间:2019-03-03 10:57:37

标签: android security webserver

我正在编写一个Android应用程序,但Google Play商店无法使用。我正在研究如何完成验证应用程序的任何用户确实是经过验证的用户。

我想将服务器用于该应用程序无论如何都用于发送/接收数据的过程。我的想法是提出类似的挑战,只有经过验证的客户才能通过。因此,任何使用假冒应用程序的人都将无法绕过它。

有没有解决此问题的标准方法?我进行了一些搜索,但没有找到完全涵盖此内容的内容。请记住,我知道以下事实:鉴于该应用程序运行在我无法触及的设备android手机上,可能总会有绕开挑战的方法。我希望了解大多数情况下的情况。

1 个答案:

答案 0 :(得分:2)

这里有两个可能的问题。第一个是用户身份验证(authn)和授权(authz),第二个是验证客户端应用程序本身是真实的。

对于用户authn / authz,我将使用带有OpenID / Connect的某种形式的OAuth2。最终结果是您正在授权客户端应用程序代表用户访问您的最终资源。有开源和免费的商业服务可帮助您入门。

更麻烦的是应用程序本身的身份验证。 API密钥是此处的标准方法,但是它们是静态机密,如果应用程序被篡改或在通信通道中发现了密钥,它们的作用将不大。无论您根据需要多么努力地隐藏或计算秘密,如果您的端点足够有价值,那么有人会做必要的工作来提取和滥用秘密,然后再提取您的后端。

您可以很好地思考某种形式的质询-响应协议。验证码是此处的典型方法,但它们使移动应用程序上的用户感到非常烦恼,并且并不总是很有效。我相信(并且完全披露,我的公司也是如此),通过加密安全性挑战证明应用程序的真实性是一项可靠的策略。证明服务向应用程序提出挑战并分析其响应。挑战是评估应用程序的代码是否已被篡改,并评估运行时的状态(应用程序是否植根?是否在调试器中运行?是否存在frida或xposed框架?等)。该应用程序会获得一个短暂的令牌-如果通过认证,则正确签名,否则无效。该应用程序中没有秘密,并且该应用程序不会做出身份验证决定;它只是将令牌传递到您的后端,后端会检查令牌的生存期和签名以确定应用程序的真实性。没有令牌或无效令牌,并且您知道这是机器人程序或被篡改的应用程序。

有关用户和应用程序真实性的背景信息,请查看博客文章(共3部分),从Mobile API Security Techniques开始;如果您喜欢视频,请查看A Tour of Mobile API Underprotection。我鼓励您也查看approov.io,以了解如何将其实现为服务。