首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生物鉴别实现

生物鉴别实现
EN

Stack Overflow用户
提问于 2019-12-31 11:47:53
回答 2查看 3.7K关注 0票数 2

我正在寻找关于使用指纹/touchID/FaceId的移动应用程序的替代身份验证的最佳实践。

我们有以下架构:

  • 数据库: PostgreSQL
  • 后端:内核2.2中的.net REST
  • 客户端:
    • Angular2 web客户端
    • Xamarin中的一个移动应用程序<--这是魔法应该发生的地方,

目前,我们的客户端使用用户名/密码对REST进行身份验证,并接收一个JWT令牌。然后将令牌附加到API的每个安全请求上。

我想要实现的

用户在移动键盘上输入密码并不总是很方便,所以我试图用指纹、faceID、touchID等生物识别身份验证来实现更简单的登录方式.

我认为,工作流程如下:

  • 第一次使用用户名/密码组合从移动应用程序登录
  • 如果设备允许,请用户使用生物识别。
  • 生成一个令牌并将其发送到API
  • 将令牌存储在安全存储中(Keystore / Keychain)
  • 使用此令牌登录而不是密码。

我们总是有经典的用户名/密码回退。

我在这里阅读了大量关于堆栈溢出的文章,并在Google上搜索解决方案,但似乎没有人能解释后端安全实现的用例。

我已经在我的应用手机上实现了指纹扫描仪,并获得了成功的回调。我在我的Xamarin项目中使用这个库来获得生物鉴别:https://github.com/smstuebe/xamarin-fingerprint

你能告诉我如何实施它吗?在后端和客户端之间存储通用令牌是最好的方法吗?密钥存储/密钥链是否安全?我漏掉了什么吗?

非常感谢,

问候

EN

回答 2

Stack Overflow用户

发布于 2019-12-31 12:00:15

密钥链是您设备上最安全的位置。您可以添加越狱检测措施,以提高安全性,从密钥链中删除令牌,并在检测到越狱时从内存中清除令牌(混淆此代码)。至于令牌,我将在后端生成它,并将其作为auth调用响应传递回客户端。然后,如果用户选择使用双指标提示进行访问,则将其存储在密钥链中。然后,对于每个调用,将此令牌添加到请求头中。后端就是这样识别你的。

票数 4
EN

Stack Overflow用户

发布于 2019-12-31 12:21:57

正如我理解您的问题一样,您可以按照以下步骤设计解决方案。

  1. 在客户端生成AsymmetricKeyPair。
  2. 与后端服务器共享公钥。
  3. 在后端服务器上用公钥加密authenticationToken。
  4. 将encryptedToken共享到客户端应用程序,并在设备上本地保存。
  5. 使用生物识别apis访问私钥。(只有经过身份验证的用户才能获得访问权限。
  6. 解密encryptedToken并使用它进行进一步的身份验证。

您可以在这个android博客中参考这个设计:它为Android提供了设计,您可以将其作为参考,并为Xamarin创建类似的设计。https://android-developers.googleblog.com/2015/10/new-in-android-samples-authenticating.html

不推荐指纹API,您将需要使用BiometricPrompt 带有加密对象的BiometricPrompt

最好在设备上本地存储加密数据。如果在TEE(可信执行环境)环境下运行,则设备密钥存储和密钥操作是安全的。您可以使用下面的API检查android是否支持TEE:

代码语言:javascript
复制
isInsideSecureHardware

安卓关键系统https://developer.android.com/training/articles/keystore https://developer.android.com/reference/android/security/keystore/KeyInfo.html#isInsideSecureHardware()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59543742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档