authentication - Autenticación de usuario desde el navegador mediante el certificado de firma digital en un token USB o tarjeta inteligente
certificate digital-signature (2)
Me gustaría saber el código JavaScript para la autenticación de usuario desde el navegador con firma digital en el token USB o tarjeta inteligente del cliente. Pero no entiendo cómo firmar digitalmente la solicitud de inicio de sesión, por ejemplo, authtoken, o UserID y Passwrd desde el navegador mediante USB Token. Necesito una ventana emergente en el navegador para seleccionar el formulario de certificado Token USB. Mi usuario tiene tokens USB de varias marcas y controladores respectivos instalados en su PC.
Necesito una solución donde el usuario no tenga que seleccionar el controlador tokken.
Métodos como los applets de Java, Active X, etc. se están eliminando gradualmente de las nuevas ofertas de Modern Browser. Recientemente se ha hablado mucho acerca de la API de WebCrypto, pero a partir de ahora, la API de WebCrypto no proporciona acceso a (Windows) ni a ningún otro almacén de claves o dispositivo criptográfico local USB / tarjeta inteligente.
Para la autenticación desde el navegador con firma digital, una de las extensiones gratuitas de Chrome disponible es Signer.Digital chrome extension. La configuración del sistema local (host que se ejecuta detrás del navegador Chrome en Windows) se puede descargar desde https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip instalación de este host y el reinicio de Chrome agregarán automáticamente Signer.Digital Extensión de cromo
El trabajo real de esta extensión se ilustra aquí
Pasos de prueba:
-
Instale los controladores de dispositivo para su token USB o tarjeta inteligente: esto debe hacer que su certificado en el almacén de certificados de Windows
-
Instale la https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip indicada arriba.
-
Reinicie el navegador Chrome.
-
Abrir este enlace
-
Coloque UserID & Password y haga clic en el botón Registrar : esto le pedirá que seleccione la firma digital y la registre en el servidor (solo para esta sesión, no es permanente).
-
Luego, vuelva a poner la misma ID de usuario y contraseña, seleccione el mismo Certificado y haga clic en Iniciar sesión . La selección de diferentes certificados no permitirá el inicio de sesión.
Javascript para llamar al método de extensión:
Para registrar el certificado en el servidor:
//Get Selected Certificate Information
SignerDigital.getSelectedCertificate()
.then(
function (CertInfo) {
//Success returns Certificate Subject and Thumbprint
},
function (errmsg) {
//Send errmsg to server or display the result in browser.
}
);
Para autenticar o iniciar sesión con firma digital:
SignerDigital.signAuthToken(authToken, "SHA-256") //or "SHA256"
.then(
function (SignData) { //Success returns Signed Auth Token
},
function (errmsg) {
//Send errmsg to server or display the result in browser.
}
);
Para firmar PDF:
//Calculate Sign for the Hash by Calling function from Extension SignerDigital
SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256") //or "SHA256"
.then(
function (signDataResp) {
//Send signDataResp to Server
},
function (errmsg) {
//Send errmsg to server or display the result in browser.
}
);
Si falló: devuelve un mensaje de error que comienza con "SDHost Error:"
Autentificación de usuario desde el navegador
También puede consultar https://fortifyapp.com, que tiene un cliente que, una vez instalado, permite que las aplicaciones web utilicen tarjetas inteligentes sin que el usuario haga más que insertar la tarjeta inteligente.
Una vez insertada, inspecciona la tarjeta y luego prueba el controlador apropiado y, una vez cargada, la aplicación web, a través de un cifrado en línea de polyfill, puede interactuar con el token / tarjeta inteligente.
Puede leer más sobre cómo funciona aquí: https://unmitigatedrisk.com/?p=620