java - 如何使用密码处理生物特征?
问题描述
我的应用程序需要密码才能使用。用户第一次打开应用程序时输入他们的密码,我将密码发送到服务器端,他们执行通常的散列+加盐例程。下次用户输入密码时,我将其发送到后端进行验证,并向我发送一个临时令牌以用于进一步查询。它工作正常。
现在我希望用户能够使用生物识别(指纹等)登录。Android 会处理这个问题,并让我知道用户是否通过了生物特征认证。但后来我没有密码发送到后端并获取令牌。我该如何处理?我想我可以存储密码并在生物特征验证通过时发送,但这听起来像是一个巨大的安全漏洞。我可以加密密码,但这会产生存储加密密钥的问题。
我的问题是,像这样处理生物识别登录的常用方法是什么?有没有一种安全的方法来存储密码,所以它只对我的应用程序可见?SharedPreferences
可以通过root访问绕过,所以这可能不是一个选择。使用“无系统根”等检测有根电话也不可靠。
解决方案
我将评论中的建议结合起来,并将敏感信息EncryptedSharedPreferences
存储在 AndroidKeyStore 中,并将密钥存储在 AndroidKeyStore 中。它工作正常,唯一的问题是MasterKey
所需的EncryptedSharedPreferences
在 API 22 和 21 上不起作用。这是一个解决方法,但我不知道它有多安全。
如果手机已经root,似乎仍然可以绕过它,但现在更困难了。
推荐阅读
- python - 重塑numpy数组/矩阵
- javascript - 打印数据到
- 在 web 表单 asp.net 中使用 JAVASCRIPT JQUERY 标记
- angular - 如何在另一个 subscribe() 中发出 HTTP 请求?
- python - 如果第一个标头值为空,则 pandas 跳过它
- java - RecyclerView、RecyclerView.Adapter和RecyclerView.LayoutManager在哪里声明?
- python - 检查文件中是否存在值
- django - 我在没有基本 url 的 cpanel(namecheap) 中部署 django 项目,其他 url 不起作用
- java - 为什么GET方法返回对象中的对象
- python - 如何在 kivy-python 中创建自定义小部件
- python - Python tkinter如何放大小部件