我正在使用Appcelerator创建一个应用程序,其中用户需要输入用户名和密码才能登录。登录后,用户可以启用TouchID进行身份验证。注销后,用户可以使用TouchID进行身份验证并使用该应用程序。
我的流程是,一旦提供了用户名和密码,我就会使用以下模块iOS Keychain Module将这两个信息存储在Keychain中。然后我使用ti.touchid来验证指纹,如果成功,那么我从钥匙串中检索用户名和密码,然后通过HTTPS Web服务调用发送它并将用户登录到应用程序。
我的疑问是,这是否是一种可接受的方法。
答案 0 :(得分:2)
我不是iOS开发人员,也没有任何ti或钥匙串术语对我来说意味着什么。这是一个开始,并减少我可能得到的下来票数。
在安全性方面,我建议您想象一下,如果您知道存储了一些身份验证凭据,就可以获取该特定用户的手机。让我们说我是你的应用程序的用户,已经登录并将我的凭据保存在我的设备上的某个地方,你从我这里偷了它。
现在,您是否可以访问我的帐户?有权访问物理电话的黑客是否能够检索存储在您的钥匙串存储中的任何信息?
如果是这样,如果您无论如何都可以这样做,那么您的方法无效。
我知道您希望通过确保用户只使用指纹登录来保存用户,这是考虑这种方法的正当理由,但您必须考虑逆向工程方面的所有内容。
其他建议是使用动态哈希在Keychain中存储信息,并确保在恢复之前检查它。例如,用户凭证保存在"家庭wifi"只能用你的指纹验证"在家里"在同一个wifi网络上,同一个网络在不同的网络上无效。
即) (keychainItem.x = y)仅为IF(否则为其他)
这个(其他的东西)会阻止黑客访问Keychain,即使他们可以访问设备本身。
我在使用存储的cookie编程Web应用程序时自己这样做。例如,我只使用存储的cookie,如果它是从保存它的同一IP访问的话。只要IP地址发生变化,即使cookie值正确,用户也必须重新进行身份验证。
希望这有帮助。