Аутентификация пользователя из браузера с использованием сертификата цифровой подписи на USB-токене или смарт-карте
Я хотел бы знать код JavaScript для аутентификации пользователя из браузера с цифровой подписью на USB-токене или смарт-карте клиента. Но я не понимаю, как подписать цифровой запрос на вход, скажем, authtoken или UserID и Passwrd из браузера, используя USB Token. Мне нужно всплывающее окно в браузере, чтобы выбрать форму сертификата USB Token. У моего пользователя на ПК установлены токены USB разных производителей и соответствующие драйверы.
Мне нужно решение, где пользователю не нужно выбирать драйвер токена.
2 ответа
Такие методы, как java-апплеты, Active X и т. Д., Постепенно исключаются из новых предложений Modern Browser. В последнее время много говорят об API WebCrypto, но на данный момент API WebCrypto не предоставляет доступ к (Windows) или любым другим хранилищам ключей или локальному устройству шифрования USB/Smartcard.
Для аутентификации из браузера с использованием цифровой подписи одним из таких бесплатных расширений Chrome является расширение Signer.Digital chrome. Установку локальной системы (хост, работающий за браузером Chrome в Windows) можно загрузить с https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip установке и перезапуске Chrome автоматически добавляется Signer.Digital. Расширение Chrome
Фактическая работа этого расширения иллюстрируется здесь
Шаги тестирования:
Установите драйверы устройств для вашего USB-токена или смарт-карты - это должно сделать ваш сертификат в хранилище сертификатов Windows
Установите настройки, указанные выше.
Перезапустите браузер Chrome.
Откройте эту ссылку
Введите UserID & Password и нажмите кнопку Register - здесь будет предложено выбрать цифровую подпись и зарегистрировать ее на сервере (только для этого сеанса - не постоянно).
Затем снова введите одинаковые идентификатор пользователя и пароль, выберите тот же сертификат и нажмите " Войти". Выбор другого сертификата не позволит войти в систему.
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 Error:"
Вы также можете проверить https://fortifyapp.com/ котором установлен клиент, который после установки позволяет веб-приложениям использовать смарт-карты, не требуя от пользователя большего, чем просто вставить смарт-карту.
После вставки он проверяет карту, а затем пробует соответствующий драйвер и после загрузки веб-приложения через полифилл webcrypto может взаимодействовать с токеном / смарт-картой.
Подробнее о том, как это работает, можно прочитать здесь: https://unmitigatedrisk.com/?p=620