Android 验证移动设备
我正在开发客户机-服务器应用程序,其中客户机应用程序将在移动设备(Android、iOS)上运行,并通过HTTP协议与服务器通信。移动应用程序将在市场上免费提供,多个用户将在同一设备上使用同一应用程序实例 我需要对服务器的每个请求进行身份验证,我需要对设备进行身份验证,而不是对用户进行身份验证,实际上任何人都可能拥有设备 我一直围绕着这个解决方案工作: 安装应用程序后: 假设这是在安全网络上完成的:Android 验证移动设备,android,ios,security,authentication,Android,Ios,Security,Authentication,我正在开发客户机-服务器应用程序,其中客户机应用程序将在移动设备(Android、iOS)上运行,并通过HTTP协议与服务器通信。移动应用程序将在市场上免费提供,多个用户将在同一设备上使用同一应用程序实例 我需要对服务器的每个请求进行身份验证,我需要对设备进行身份验证,而不是对用户进行身份验证,实际上任何人都可能拥有设备 我一直围绕着这个解决方案工作: 安装应用程序后: 假设这是在安全网络上完成的: 管理员(不是普通用户)在给定设备上运行应用程序,并使用应用程序的身份验证表单一次(填写登录名和密
一些注意事项: 我相信,由于有了请求密钥,客户端确实需要证明自己知道秘密设备密钥(没有请求密钥,黑客可以再次发送截获的数据)。由于设备密钥是通过安全网络发送的,因此无法截获,并且由于它存储在安全存储器中,因此无法从设备中窃取 然而,我认为没有100%的安全存储(至少在android上),并且如果设备是根设备,则机密设备密钥可能会被盗。对黑客来说,将其加密存储只会更加困难——他需要对客户端应用程序进行反编译,并找到如何解密
编辑:建议的方法没有什么变化(存在安全漏洞),添加了一些注释和其他一些小细节。我想你已经知道了。keytool和自签名证书呢?我可能帮不了什么忙。我要做的是在Android应用程序中为登录创建一个web服务(当然,您需要加密和解密您的登录)。如果登录成功,请将用户会话保存在SharedReferences或您选择的其他存储中。用户完成后,用户可以注销,用户会话将被销毁。问题是,我确实需要验证设备而不是用户(只是为了确保请求来自特定设备)。用户甚至没有任何登录/密码,他们只有ID。但是,管理员(服务器)从设备登录一次没有问题,但他不能每天登录,也不能在整个会话中监视设备。基本上,我只需要确保具有给定用户ID的请求来自正确的设备(管理员将管理允许的设备列表);然而,这是一种为你的应用程序识别用户的冒险方式,因为如果用户擦除设备,它就会消失,并且你的用户可能无法在不同的设备上运行你的应用程序。关于设备id的更多信息,请查看此链接:谢谢,我知道DeviceID,但是,尽管任何人都可以访问设备,但也比任何人都可以访问设备id,然后伪造通信(像设备一样)。那么,在这种情况下,你需要想出一种算法来加密你的客户端证书是的,我也发现了。。。我现在不确定,是否有其他应用程序可以访问保存的帐户信息。。。在任何情况下,黑客都可以访问存储的信息,如果一个设备是根。。。如果我存储在任何其他“仅用于应用”的存储中,他也会这样做。。根据我所发现的-数据可能会受到保护(即使黑客拥有物理访问权限),因为Android 4.3和TPM(这不是很令人满意)都使用了KeyChain如果android适用于个人设备,则系统没有用户帐户。但是,构建android的Linux内核确实有用户。浪费这些功能会让人感到羞耻,因此他们所做的就是重新调整其用途。应用程序供应商有帐户,因此默认情况下,应用程序只能访问自己的软件包名称。您可以覆盖。这在清单权限中,当安装应用程序时,用户必须接受“sudo”权限,但只能在安装时接受。你好,卢卡斯,我今天刚遇到这个问题,你找到解决方案了吗?你好,Chintan。不幸的是,我没有发现比上述协议更好的东西。幸运的是,在我的环境中,高安全性并不重要,我只是想让它尽可能安全。最后,我基本上没有编写android应用程序,只有服务器。但请注意,我有一句评论是“自从安卓4.3安装了TPM以来,数据可能会受到保护(即使黑客拥有物理访问权)。也许你想检查它是否是真的,是否对你有任何可能的用途。实际上,确切地说,我对协议做了一些改进:所有的请求密钥只有时间限制的持续时间(比如5分钟)+一些其他特定于上下文的修改,