Haz tus apps más seguras con los accesos biométricos
seguridad app app android biométricos

Haz tus apps más seguras con los accesos biométricos

25/05/2022

La seguridad de nuestros dispositivos electrónicos es vital. Y tú lo sabes mejor que nadie, desarrollador. En nuestros smartphones y tablets guardamos gran cantidad de información y datos sobre nosotros que no queremos que estén al alcance de cualquiera. Una forma muy efectiva de protegerlos es utilizar accesos biométricos, pero ¿los has usado alguna vez para dar una mayor seguridad a tus apps?

Los accesos biométricos, como la huella dactilar, te ayudan a proteger tu app en los accesos físicos permitiéndote además tener a mano un baúl de contraseñas y tokens 2FA (autenticación en dos pasos), reforzando la seguridad cómo todo un experto. Pero ¿por qué ha triunfado tanto el uso de la huella dactilar? Es sencillo hacerse una idea:

  • Siempre va con nosotros, no podemos perderla u olvidarla como ocurre con las llaves de casa o la clave numérica de la tarjeta.
  • Es fácil y rápida de usar, solo tienes que apoyar el dedo en el sensor y listo.
  • Genera seguridad en el usuario: sabe que sólo él puede desbloquear su dispositivo.

Por todo esto, se ha ido ganando la confianza de la gente, lo que ha hecho que su popularidad no deje de crecer, impulsando su evolución. Y es que, junto con nuestros dispositivos, esta tecnología ha ido mejorando y haciéndose más segura, existiendo en la actualidad tres tipos en el mercado:

  • Óptico: este tipo de sensor biométrico es el primero que salió al mercado, usando una tecnología parecida a la fotografía. No era demasiado seguro, pero ayudó a impulsarla.
  • Capacitivo: el más extendido en la actualidad, se basa en la generación de una huella eléctrica al entrar en contacto con el dedo.
  • Ultrasónico: es el más reciente y aun no muy extendido. Utiliza ultrasonidos para crear una huella tridimensional, siendo el más seguro del mercado en la actualidad.

Con todo esto, seguro que quieres aplicar a tu app una identificación biométrica con huella dactilar. Te vamos a mostrar cómo hacerlo, pero, lo primero, debes tener en cuenta que accederás a la información de seguridad configurada por Android, no podrás crear nuevas configuraciones para diferentes huellas.

 

¿Estás ready? Comenzamos…

El primer paso será definir los tipos de autentificación que admite tu app usando la interfaz BiometricManager.Authenticators Para ello, necesitarás introducir el siguiente código:

 

// Allows user to authenticate using either a Class 3 biometric or

// their lock screen credential (PIN, pattern, or password).

promptInfo = new BiometricPrompt.PromptInfo.Builder()

        .setTitle("Biometric login for my app")

        .setSubtitle("Log in using your biometric credential")

        // Can't call setNegativeButtonText() and

        // setAllowedAuthenticators(...|DEVICE_CREDENTIAL) at the same time.

        // .setNegativeButtonText("Use account password")

        .setAllowedAuthenticators(BIOMETRIC_STRONG | DEVICE_CREDENTIAL)

        .build();

Tras esto, deberás comprobar que la autentificación biométrica esté disponible:

BiometricManager biometricManager = BiometricManager.from(this);

switch (biometricManager.canAuthenticate(BIOMETRIC_STRONG | DEVICE_CREDENTIAL)) {

    case BiometricManager.BIOMETRIC_SUCCESS:

        Log.d("MY_APP_TAG", "App can authenticate using biometrics.");

        break;

    case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:

        Log.e("MY_APP_TAG", "No biometric features available on this device.");

        break;

    case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:

        Log.e("MY_APP_TAG", "Biometric features are currently unavailable.");

        break;

    case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:

        // Prompts the user to create credentials that your app accepts.

        final Intent enrollIntent = new Intent(Settings.ACTION_BIOMETRIC_ENROLL);

        enrollIntent.putExtra(Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED,

                BIOMETRIC_STRONG | DEVICE_CREDENTIAL);

        startActivityForResult(enrollIntent, REQUEST_CODE);

        break;

}

 

Podrás verificar si el usuario de identificó creando una credencial de dispositivo o una credencial biométrica con getAuthenticationType()

 

El siguiente paso, es mostrar un mensaje al usuario para que se identifique mediante credenciales biométricas. Para ello:

  1. En el archivo build.gradle de tu app, agrega una dependencia a la biblioteca androidx.biometric
  2. Muestra el cuadro de dialogo con el siguiente código:

private Executor executor;

private BiometricPrompt biometricPrompt;

private BiometricPrompt.PromptInfo promptInfo;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_login);

    executor = ContextCompat.getMainExecutor(this);

    biometricPrompt = new BiometricPrompt(MainActivity.this,

            executor, new BiometricPrompt.AuthenticationCallback() {

        @Override

        public void onAuthenticationError(int errorCode,

                @NonNull CharSequence errString) {

            super.onAuthenticationError(errorCode, errString);

            Toast.makeText(getApplicationContext(),

                "Authentication error: " + errString, Toast.LENGTH_SHORT)

                .show();

        }

        @Override

        public void onAuthenticationSucceeded(

                @NonNull BiometricPrompt.AuthenticationResult result) {

            super.onAuthenticationSucceeded(result);

            Toast.makeText(getApplicationContext(),

                "Authentication succeeded!", Toast.LENGTH_SHORT).show();

        }

 

        @Override

        public void onAuthenticationFailed() {

            super.onAuthenticationFailed();

            Toast.makeText(getApplicationContext(), "Authentication failed",

                Toast.LENGTH_SHORT)

                .show();

        }

    });

    promptInfo = new BiometricPrompt.PromptInfo.Builder()

            .setTitle("Biometric login for my app")

            .setSubtitle("Log in using your biometric credential")

            .setNegativeButtonText("Use account password")

            .build();

    // Prompt appears when user clicks "Log in".

    // Consider integrating with the keystore to unlock cryptographic operations,

    // if needed by your app.

    Button biometricLoginButton = findViewById(R.id.biometric_login);

    biometricLoginButton.setOnClickListener(view -> {

            biometricPrompt.authenticate(promptInfo);

    });

}

 

Ya estás preparado para crear las apps más seguras del mercado gracias a los accesos biométricos ¿te atreves a probarlo?

 

 

Samsung Dev Spain es la comunidad oficial de Samsung para desarrolladores españoles. Si te das de alta, puedes conseguir entrar en nuestro programa de préstamos -y conseguir dispositivos para desarrollar apps para nuestro ecosistema-, acceder a material gratuito como el whitepaper Blockchain: dibujando un futuro descentralizado; participar en promociones como dispositivos por apps , acudir gratis a eventos formativos como Samsung Dev Day o disfrutar de ventajas exclusivas en Samsung PLUS.