我想知道用户身份验证的JavaScript代码,用户可通过客户端的USB令牌或智能卡上的数字签名进行身份验证。但我不明白如何使用USB令牌从浏览器以数字方式签署登录请求,例如authtoken或UserID和Passwrd。我需要在浏览器上弹出一个弹出窗口来选择证书形式的USB令牌。我的用户在他们的PC上安装了各种品牌的USB令牌和相应的驱动程序。
我需要一个解决方案,用户不必选择令牌驱动程序。
Java applet,Active X等方法正在逐步淘汰新的Modern Browser产品。最近有很多关于WebCrypto API的讨论,但截至目前,WebCrypto API不提供对(Windows)或任何其他Key存储或本地加密USB /智能卡设备的访问。
对于使用数字签名从浏览器进行身份验证,可以使用一个免费的Chrome扩展程序是Signer.Digital chrome扩展。可以从https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip下载本地系统(在Windows上的Chrome浏览器后面运行的主机)设置安装此主机并重新启动Chrome将自动添加Signer.Digital Chrome Extension
here说明了这个扩展的实际工作情况
测试步骤:
Javascript从扩展名调用方法:
在服务器上注册证书:
//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.
}
);
要使用数字签名进行身份验证或登录:
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.
}
);
签署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.
}
);
如果失败:返回以“SDHost错误:”开头的错误消息
您还可以查看具有客户端的https://fortifyapp.com,该客户端一旦安装,就可以使Web应用程序使用智能卡而无需用户执行更多操作而不是插入智能卡。
插入后,它检查卡,然后尝试相应的驱动程序,一旦加载Web应用程序,通过webcrypto polyfill,可以与令牌/智能卡交互。
你可以在这里阅读更多关于它是如何工作的:https://unmitigatedrisk.com/?p=620