Аутентификация пользователя из браузера с использованием сертификата цифровой подписи на 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

Фактическая работа этого расширения иллюстрируется здесь

Шаги тестирования:

  1. Установите драйверы устройств для вашего USB-токена или смарт-карты - это должно сделать ваш сертификат в хранилище сертификатов Windows

  2. Установите настройки, указанные выше.

  3. Перезапустите браузер Chrome.

  4. Откройте эту ссылку

  5. Введите UserID & Password и нажмите кнопку Register - здесь будет предложено выбрать цифровую подпись и зарегистрировать ее на сервере (только для этого сеанса - не постоянно).

  6. Затем снова введите одинаковые идентификатор пользователя и пароль, выберите тот же сертификат и нажмите " Войти". Выбор другого сертификата не позволит войти в систему.

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

Другие вопросы по тегам