usar studio para lector huellas huella escaner escanear digitales dactilares dactilar capturar biometrico autenticacion aplicacion javascript android cordova fingerprint

javascript - studio - lector biometrico android



Autenticación de huellas dactilares Cordova en el servidor (3)

No se puede autenticar la huella dactilar en el servidor, las huellas dactilares se almacenan o se autentican utilizando la Live Scan/Biometric template . La autenticación se realiza al comparar la plantilla de exploración actual con las plantillas almacenadas previamente

En primer lugar, no tiene acceso a estas plantillas almacenadas (no proporcionadas por los proveedores del sistema operativo / fabricantes de teléfonos) y si suponemos que tiene acceso a esas plantillas, entonces se requiere un algoritmo eficiente (basado en imágenes / basado en patrones) para compare la plantilla actual con las plantillas almacenadas previamente. No puede simplemente autenticarlo por comparación de cadenas.

Estoy intentando crear un mecanismo de autenticación en mi aplicación (cordova) para Android que permitirá a mis usuarios iniciar sesión con una contraseña y un nombre de usuario, o les permitirá escanear sus dedos para iniciar sesión.

¿Cómo se puede verificar una huella dactilar registrada en un cliente, en el lado del servidor? ¿Esto es posible usando Cordova? Traté de transmitir el resultado de un escaneo de dedo a mi servidor: esto se veía así:

FingerprintAuth.isAvailable(function(result) { if (result.isAvailable) { if(result.hasEnrolledFingerprints){ FingerprintAuth.show({ clientId: client_id, clientSecret: client_secret }, function (result) { alert(JSON.stringify(result)); $http.post(''http://192.168.149.33:3000/authorize'', result).then( function(response) {} ); if (result.withFingerprint) { $scope.$parent.loggedIn = true; alert("Successfully authenticated using a fingerprint"); $location.path( "/home" ); } else if (result.withPassword) { alert("Authenticated with backup password"); } }, function(error) { console.log(error); // "Fingerprint authentication not available" }); } else { alert("Fingerprint auth available, but no fingerprint registered on the device"); } } }, function(message) { alert("Cannot detect fingerprint device : "+ message); });

Del lado del servidor estoy recibiendo los siguientes datos (3 exploraciones separadas):

{ withFingerprint: ''t8haYq36fmBPUEPbVjiWOaBLjMPBeUNP/BTOkoVtZ2ZiX20eBVzZAs3dn6PW/R4E/n'' } { withFingerprint: ''rA9H+MIoQR3au9pqgLAi/EOCRA9b0Wx1AvzC/taGIUc8cCeDfzfiDZkxNy5U4joB/n'' } { withFingerprint: ''MMyJm46O8MTxsa9aofKUS9fZW3OZVG7ojD+XspO71LWVy4TZh2FtvPtfjJFnj7Sy/n'' }

Los patrones parecen variar cada vez, ¿hay alguna manera de vincular la huella dactilar con, por ejemplo, un patrón guardado en un usuario en una base de datos?



Respuesta corta

Las cadenas devueltas por esta API no son "patrones de huellas dactilares". Entonces no podrás autenticarte de la manera en que estás pensando ...

Respuesta larga

Comencemos mirando el código fuente de la API que parece que estás usando.

Al mirar este archivo , vemos estos métodos:

public static void onAuthenticated(boolean withFingerprint) { JSONObject resultJson = new JSONObject(); String errorMessage = ""; boolean createdResultJson = false; try { if (withFingerprint) { // If the user has authenticated with fingerprint, verify that using cryptography and // then return the encrypted token byte[] encrypted = tryEncrypt(); resultJson.put("withFingerprint", Base64.encodeToString(encrypted, 0 /* flags */)); } else { // Authentication happened with backup password. resultJson.put("withPassword", true); // if failed to init cipher because of InvalidKeyException, create new key if (!initCipher()) { createKey(); } } createdResultJson = true; // ... /** * Tries to encrypt some data with the generated key in {@link #createKey} which is * only works if the user has just authenticated via fingerprint. */ private static byte[] tryEncrypt() throws BadPaddingException, IllegalBlockSizeException { return mCipher.doFinal(mClientSecret.getBytes()); }

Mira lo que se pone a "withFingerprint" . Es una codificación Base64 del secreto de cliente cifrado. Técnicamente, esta es tu autenticación. Utilizaría este token para autenticar las solicitudes y su servidor descifraría y validaría el secreto del cliente.

Resumen

La toma de huellas dactilares agrega un nivel de seguridad, pero no es el único medio de seguridad. Se debe establecer una relación con el dispositivo y el servidor de antemano.

Encontré que este diagrama es útil para comprender la intención de la autenticación de huellas dactilares de android (ref: http://android-developers.blogspot.com/2015/10/new-in-android-samples-authenticating.html )