Основываясь на полученном опыте интеграции продукта в реальные проекты мне хочется отметить, что нередко разработчики для реализации серверной части предпочитают использовать поддерживающий российские криптоалгоритмы openssl.
В данной статье будет расписана типичная схема подобной интеграции, основанная на следующих сценариях использования плагина:
- Регистрация на портале (с выдачей сертификата или по имеющемуся сертификату)
- Строгая аутентификация на портале
- Электронная подпись данных и/или файлов в формате CMS
- Шифрование данных и/или файлов в формате CMS
Данные сценарии предполагают клиент-серверное взаимодействие, написание клиентских скриптов на JavaScript и соответствующих им серверных вызовов openssl.
Общие операции
Операции с устройством
Поиск подключенных устройств
Любой клиентский сценарий начинается с поиска подключенных к компьютеру USB-устройств Рутокен. В контексте данной статьи акцент делается на устройство Рутокен ЭЦП.
var devices = Array();
try
{
devices = plugin.enumerateDevices();
}
catch (error)
{
console.log(error);
}
При этом возвращается список идентификаторов подключенных устройств. Идентификатор представляет собой число, связанное с номером слота, к которому подключено устройство. При повторном перечислении это число может отличаться для одного и того же устройства.
Рутокен Плагин определяет все подключенные к компьютеру USВ-устройства Рутокен ЭЦП, Рутокен PINPad, Рутокен WEB. Поэтому следующим шагом следует определить тип устройства.
Получение информации об устройстве
Для определения типа устройства следует использовать функцию getDeviceInfo с параметром TOKEN_INFO_DEVICE_TYPE. Значение этой константы содержится в объекте плагина.
var type;
try
{
type = plugin.getDeviceInfo(deviceId, plugin.TOKEN_INFO_DEVICE_TYPE);
}
catch (error)
{
console.log(error);
}
switch (type)
{
case plugin.TOKEN_TYPE_UNKNOWN:
message = "Неизвестное устройство";
break;
case plugin.TOKEN_TYPE_RUTOKEN_ECP:
message = "Рутокен ЭЦП";
break;
case plugin.TOKEN_TYPE_RUTOKEN_WEB:
message = "Рутокен Web";
break;
case plugin.TOKEN_TYPE_RUTOKEN_PINPAD_2:
message = "Рутокен PINPad";
break;
}
Также с помощью функции getDeviceInfo можно получить:
- модель устройства
- метку устройства
- серийный номер устройства
- информацию о том, залогинен ли пользователь на устройство
Смена PIN-кода
var options = {};
try
{
plugin.changePin(deviceId, "12345678", "12345671", options);
}
catch (error)
{
console.log(error);
}
Здесь первым параметром выступает старый PIN-код, а вторым новый PIN-код.