使用生物识别API使应用内身份验证变得容易
#安全 #android #mobile #authentication

如今,在Android应用中,我们可以实现各种形式的用户身份验证,例如登录,验证,交易批准等。传统上,我们将通过电子邮件,密码,OTP等对用户进行身份验证,但是如果我们可以用他们已经在设备上使用的安全令牌对用户进行身份验证,例如指纹,面部,虹膜,虹膜,密码,销钉或图案?

发布了Android 10(API级别29),引入了新的生物识别API,以帮助Android开发人员无缝地验证其用户的生物识别技术或设备凭据(密码,PIN或图案)已经在设备上注册。此功能也向后兼容,直至Android 6(API级别23)。集成此库非常简单,可以通过4个简单的步骤完成。

nb:本文也可在Medium

上找到

现在四个简单的步骤

步骤1:添加依赖关系
在应用程序的build.gradle文件中,添加依赖项以下载库的工件。

dependencies {
    ...
    implementation "androidx.biometric:biometric:${current_version}"
}

在撰写本文时,该版本为1.1.0

步骤2:检查设备是否可以执行生物特征验证
onCreate()中检查您的活动或片段的onViewCreated()

private fun canAuthenticate(): Boolean {
    val biometricManager = BiometricManager.from(requireContext())
    return biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_WEAK) == BiometricManager.BIOMETRIC_SUCCESS
}

if (canAuthenticate()) {
  // initializeBiometricAuth()
}

在此之前,我们可以使用biometricManager.canAuthenticate(),但已对上面提到的一种已弃用,我们必须通过某种身份验证器。

步骤3:实例化生物识别效果并构建promptinfo

private fun initializeBiometricAuth() {
        val executor: Executor = ContextCompat.getMainExecutor(context)

        val authCallback = object : BiometricPrompt.AuthenticationCallback() {

            override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                super.onAuthenticationSucceeded(result)
                showToast("Success!")
                // proceed
            }

            override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                super.onAuthenticationError(errorCode, errString)
                showToast("Error occurred: $errString")
            }

            override fun onAuthenticationFailed() {
                super.onAuthenticationFailed()
                showToast("Authentication failure")
            }
        }

        val biometricPrompt = BiometricPrompt(this, executor, authCallback)

        val promptInfo: BiometricPrompt.PromptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle("Authentication")
            .setSubtitle("Subtitle")
            .setDescription("Short description")
            .setNegativeButtonText("Cancel")
            .setConfirmationRequired(true)
            .setAllowedAuthenticators(BiometricManager.Authenticators.DEVICE_CREDENTIAL)
            .build()
}
可以使用3个参数构建生物特征局;上下文,执行人和AuthenticationCallback。 AuthenticationCallback是一个抽象类,具有3种方法。 onAuthenticationError()-当出现错误时,onAuthenticationSucceeded()-在身份验证成功时调用,而onAuthenticationFailed()-当身份验证失败时调用。这些方法中的任何一种都可以根据您的要求来实现,但是当然,onAuthenticationSucceeded()非常重要。

在构建生物特征局。在此之前,我们可以称为setDeviceCredentialAllowed(true),但已对上述setAllowedAuthenticators()进行了弃用。此方法使使用密码,PIN或模式进行身份验证。 请注意,当调用setAllowedAuthenticators(DEVICE_CREDENTIAL)时,您也不能致电setNegativeButtonText()

步骤4:验证用户
最后,您可以调用身份验证的方法,传递intpertinfo对象以身份验证用户。

biometricPrompt.authenticate(promptInfo)

这将显示一个带有提供信息的对话框,现在您可以在应用程序中无缝验证用户。

生物识别API也可用于执行其他加密操作。对于与生物识别API有关的高级主题,您可以查看official documentation

感谢您的阅读!如果您有任何观察,请在评论部分中分享您的想法。您也可以通过TwitterLinkedIn与我联系。