为了账号安全,请及时绑定邮箱和手机立即绑定

实现指纹登录

实现指纹登录

PIPIONE 2023-08-04 17:38:00
我正在尝试在 android studio 中创建一个完整的登录系统。我想允许用户使用应用程序中的指纹传感器登录他们的帐户。没有后端服务器,所以我的理解是,如果他们愿意,他们必须激活该功能,并且他们的登录详细信息应该保存在应用程序或 Android 系统内的某个位置。我遇到了 android EncryptedSharedPreferences#inherited-methods形式的加密共享首选项 ,这看起来很有希望,但在这里 https://issuetracker.google.com/issues/132325342 它指出&ldquo; 2) tik用于加密/密钥管理。但是据我所知据我所知,Tink 生成的 API < 23 个密钥以明文形式存储在 SharedPreferencestink -android中,这最终使 EncryptedSharedPreferences 不再比普通 SharedPreferences 更安全。&rdquo;因此,我正在考虑手动加密共享首选项中的数据,然后将密钥存储在密钥库中,这是否足够安全,或者用户的登录凭据是否会受到损害?到目前为止, how-to-securely-store-encryption-keys-in-android 似乎是最有效的答案,但仍不确定这是否足够?
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

有几种方法可以做到这一点。假设您需要加密用户的数据,有两种方法。

第一种方式:密钥只能通过生物识别解锁,用户每次想要使用密钥时都必须通过生物识别进行身份验证。

  1. 使用KeyGenParameterSpec、 withsetUserAuthenticationRequired(true)和 来创建密钥setUserAuthenticationValidityDurationSeconds(-1)

  2. 当用户打开您的应用程序时,调用BiometricPrompt#authenticate(CryptoObject)

  3. 当 时onAuthenticationSucceeded(),您现在可以解密数据

第二种方式:密钥可以通过生物识别或密码/图案/密码解锁,并在t上次生物识别/凭证解锁后的时间内重复使用。每当用户解锁键盘锁或设置凭据屏幕时,这些按键就会为您的应用程序解锁。

  1. 使用KeyGenParameterSpec、setUserAuthenticationRequired(true)和 来创建密钥setUserAuthenticationValidityDurationSeconds(t>0)

  2. 当用户打开您的应用程序时,使用BiometricPrompt#authenticate()调用setDeviceCredentialAllowed(true)。请注意,在这种情况下,您不需要将密钥库操作包装到 a 中CryptoObject

  3. 当 时onAuthenticationSucceeded(),将用户发送到您的应用程序

  4. 当您需要访问加密信息时,只要自上次用户认证以来的持续时间小于 即可使用密钥t。如果已经结束t,尝试使用密钥将导致UserNotAuthenticatedException,您应该提示用户再次进行身份验证并转到步骤 2。


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信