我正在寻找关于使用指纹/touchID/FaceId的移动应用程序的替代身份验证的最佳实践。
我们有以下架构:
目前,我们的客户端使用用户名/密码对REST进行身份验证,并接收一个JWT令牌。然后将令牌附加到API的每个安全请求上。
我想要实现的
用户在移动键盘上输入密码并不总是很方便,所以我试图用指纹、faceID、touchID等生物识别身份验证来实现更简单的登录方式.
我认为,工作流程如下:
我们总是有经典的用户名/密码回退。
我在这里阅读了大量关于堆栈溢出的文章,并在Google上搜索解决方案,但似乎没有人能解释后端安全实现的用例。
我已经在我的应用手机上实现了指纹扫描仪,并获得了成功的回调。我在我的Xamarin项目中使用这个库来获得生物鉴别:https://github.com/smstuebe/xamarin-fingerprint
你能告诉我如何实施它吗?在后端和客户端之间存储通用令牌是最好的方法吗?密钥存储/密钥链是否安全?我漏掉了什么吗?
非常感谢,
问候
发布于 2019-12-31 12:00:15
密钥链是您设备上最安全的位置。您可以添加越狱检测措施,以提高安全性,从密钥链中删除令牌,并在检测到越狱时从内存中清除令牌(混淆此代码)。至于令牌,我将在后端生成它,并将其作为auth调用响应传递回客户端。然后,如果用户选择使用双指标提示进行访问,则将其存储在密钥链中。然后,对于每个调用,将此令牌添加到请求头中。后端就是这样识别你的。
发布于 2019-12-31 12:21:57
正如我理解您的问题一样,您可以按照以下步骤设计解决方案。
您可以在这个android博客中参考这个设计:它为Android提供了设计,您可以将其作为参考,并为Xamarin创建类似的设计。https://android-developers.googleblog.com/2015/10/new-in-android-samples-authenticating.html
不推荐指纹API,您将需要使用BiometricPrompt 带有加密对象的BiometricPrompt
最好在设备上本地存储加密数据。如果在TEE(可信执行环境)环境下运行,则设备密钥存储和密钥操作是安全的。您可以使用下面的API检查android是否支持TEE:
isInsideSecureHardware安卓关键系统https://developer.android.com/training/articles/keystore https://developer.android.com/reference/android/security/keystore/KeyInfo.html#isInsideSecureHardware()
https://stackoverflow.com/questions/59543742
复制相似问题