我正在实施Bio metric Prompt API,以授权用户使用指纹。我发现Bio-metric Prompt API根据设备传感器类型显示不同的UI。
生物识别API SDK调用可独立工作,以根据传感器类型显示相应的UI。
现在需要关注的是:
现在的问题是:
android android-biometric-prompt in-display-fingerprint under-display-fingerprint
例如,如果用户的手机同时具有faceID 和指纹。
当前生物识别提示正在选择一个首先设置的用户
我遇到了一个问题,当用户向其 Android 设备添加新指纹时,我想使 SecretKey 失效。我可以毫无问题地生成密钥、调出生物识别提示。当我添加新指纹时,密钥不会引发异常..它仍然允许出现提示。
我可以从设备中删除所有指纹,并引发 KeyPermanentlyInvalidatedException。
我正在使用 BiometricPrompt AndroidX 库,并将 minSDK 设置为 28。我一直在遵循本指南:https ://developer.android.com/training/sign-in/biometric-auth#crypto
我的代码如下 - 如果有人愿意帮助我解决这个问题,我将非常感激。
package com.example.dogtime
import android.os.Bundle
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyPermanentlyInvalidatedException
import android.security.keystore.KeyProperties
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.biometric.BiometricPrompt
import androidx.core.content.ContextCompat
import butterknife.ButterKnife
import java.security.KeyStore
import javax.crypto.Cipher
import javax.crypto.KeyGenerator
import javax.crypto.SecretKey
class MainActivity : AppCompatActivity() {
private lateinit var biometricPrompt: BiometricPrompt
private lateinit var biometricPromptInfo: BiometricPrompt.PromptInfo
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ButterKnife.bind(this)
setContentView(R.layout.activity_main)
// Set up prompt
biometricPrompt = BiometricPrompt(
this,
ContextCompat.getMainExecutor(baseContext),
object …Run Code Online (Sandbox Code Playgroud) android kotlin android-keystore android-biometric-prompt android-biometric
我的应用程序包含登录的用户身份验证(包括 pin/图案、指纹解锁),这取决于设备安全性。我正在使用生物识别管理器来使用BiometricManager检测设备是否支持指纹,并使用isDeviceSecure()检查设备是否受到保护。我需要检测移动设备在哪种模式下受到保护,无论是使用引脚/图案、使用指纹的引脚/图案、使用面部解锁的引脚/图案还是所有三种模式(引脚/图案、面部解锁、指纹)。
android android-fingerprint-api android-biometric-prompt android-biometric
我使用了使用 Biometric api 的指纹认证及其工作。我需要对人脸识别做同样的事情,比如点击登录按钮而不是密码,我将使用人脸认证。
那么可以使用 Biometric api 还是我必须使用 Open cv?
我正在使用 androidx.biometric:biometric:1.0.1一切正常,但是当我的设备没有生物识别传感器时(或者当用户没有设置他的指纹等)并且我在进行身份验证后尝试使用DeviceCredentials 时,我的功能输入数据无效。
class MainActivity : AppCompatActivity() {
private val TAG = MainActivity::class.java.name
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<View>(R.id.first).setOnClickListener {
authenticate(MyData(1, "first"))
}
findViewById<View>(R.id.second).setOnClickListener {
authenticate(MyData(2, "second"))
}
}
private fun authenticate(data: MyData) {
Log.e(TAG, "starting auth with $data")
val biometricPrompt = BiometricPrompt(
this,
ContextCompat.getMainExecutor(this),
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
Log.e(TAG, "auth done : $data")
}
})
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setDeviceCredentialAllowed(true)
.setTitle("title")
.build()
biometricPrompt.authenticate(promptInfo)
}
}
data class MyData(
val …Run Code Online (Sandbox Code Playgroud) 我正在使用 android Biometricx 库进行面部和指纹认证。当仅注册 FaceID 并且我尝试创建密钥时,我收到“ IllegalStatException:必须至少注册一个生物识别才能创建需要用户身份验证的密钥”
我正在尝试像这样创建secretKey
try {
mKeyGenerator.init(new KeyGenParameterSpec.Builder(KEY_NAME,
KeyProperties.PURPOSE_ENCRYPT |
KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
// Require the user to authenticate with a fingerprint to authorize every use
// of the key
.setUserAuthenticationRequired(true)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build());
secretKey = mKeyGenerator.generateKey();
} catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException
| CertificateException | IOException e) {
Toast.makeText(this,"Create Key "+ e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
注册指纹后,代码工作正常。只有在注册 FaceId 时才会发生这种情况。我在这里缺少什么?
作为我的应用程序中身份验证的一部分,我正在尝试实施生物识别身份验证。
我根据文档进行了所需的代码更改。
在构建我的应用程序时,我面临以下构建错误。
找不到 android.security.identity.IdentityCredential 的类文件
请在下面找到 build.gradle 文件。
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.vj.togetheron"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//implementation "androidx.security:security-crypto:1.0.0-rc03"
// For Identity Credential APIs
//implementation "androidx.security:security-identity-credential:1.0.0-alpha01"
implementation fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleCompatible
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.biometric:biometric:1.1.0-beta01'
implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
//implementation "androidx.security:security-identity-credential:1.0.0-alpha01"
//implementation 'androidx.security:security-crypto:1.1.0-alpha02'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation …Run Code Online (Sandbox Code Playgroud) 从 android 11 开始,setUserAuthenticationValidityDurationSeconds 已被弃用,取而代之的是 KeyGenParameterSpec.Builder 中的 setUserAuthenticationParameters,但接缝处对以前的版本有任何支持。
那么,最好的解决方案是什么?
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(...)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
builder.setUserAuthenticationParameters(timeout, KeyProperties.AUTH_DEVICE_CREDENTIAL | KeyProperties.AUTH_BIOMETRIC_STRONG);
else
//noinspection deprecation
builder.setUserAuthenticationValidityDurationSeconds(timeout);
Run Code Online (Sandbox Code Playgroud)
这个?
security android android-keystore android-biometric-prompt android-biometric