На подобие того, как это делается с ЭЦП. Есть плагин к браузеру, к плагину вы можете обращаться из JS кода, что скачается с вашего сайта. Браузерный плагин соответственно ходит уже куда надо на локальной машине. Вот КРИПТО-ПРО так делает для получения сертификата ЭЦП.
JS уж точно не сможет взаимодействовать с com-портом.
Либо Java-апплет, либо отдельная дектопная прога которая будет взаимодействовать с портом а тажке слушать какой-нить порт на localhost для взаимодействия с сайтом.
По аналогии с вебмани кипером.
На сайте делается 2 запроса:
1)На сайт с сигналом «ожидаем ключа, от юзера Х», например ajax'ом
2)На прогу с сигналом «выдай ключ», например post в невидимый iframe(можно кроссдоменным ajax, но там может вылезти куча проблем с Cross-site scripting и Same origin policy).
Далее прога получив запрос «выдай ключ», отправляет ключ прямиком на сервер с сообщением «ключ пользователя Х, такой-то»
Сервер сверяет ключ, в случае его валидности в ответ на «ожидаем ключа, от юзера Х» отдает авторизационную куку.