Как программно проверить пароль пользователя информационной базы в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке прикладных решений часто возникает необходимость подписи документа или подтверждения операции пользователем прямо внутри текущего сеанса. Например, когда несколько сотрудников работают за одним компьютером и требуется подтвердить личность менеджера перед записью важного документа. В связи с этим возникает вопрос: как программно получить и проверить пароль пользователя информационной базы (ИБ)?

Рассмотрим детально, как устроена система защиты паролей в платформе 1С:Предприятие, почему исходный пароль прочитать невозможно и какими способами можно реализовать проверку введенной строки.

Почему пароль пользователя нельзя прочитать напрямую

В целях безопасности реквизит Пароль объекта ПользовательИнформационнойБазы доступен только для записи. Платформа 1С в принципе не хранит пароли пользователей в открытом виде. Вместо этого в базе данных (а именно в свойстве СохраняемоеЗначениеПароля) хранится специальный криптографический отпечаток — хэш пароля.

Таким образом, попытаться прочитать открытый текстовый пароль через код не получится. Единственное решение — вычислить хэш-сумму введенной пользователем строки и сравнить ее со значением СохраняемоеЗначениеПароля, либо воспользоваться готовыми библиотечными функциями.

Решение 1. Использование функции Библиотеки Стандартных Подсистем (БСП)

Если ваша конфигурация разработана на основе Библиотеки Стандартных Подсистем (БСП), вам не требуется вручную писать алгоритмы расчета хэша. В БСП уже присутствует готовая экспортная функция, позволяющая проверить соответствие введенного текста паролю пользователя ИБ.

Разберем пример вызова функции СохраняемоеЗначениеСтрокиПароля из общего модуля БСП:


// Переменные для проверки
ВведенныйПароль = "MySecretPass123";
ИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
ПарольСовпадает = Ложь;

// Вызов типовой функции
СохраняемоеЗначение = ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(
    ВведенныйПароль, 
    ИдентификаторПользователя, 
    ПарольСовпадает
);

Если ПарольСовпадает Тогда
    Сообщить("Пароль введен верно! Продолжаем выполнение операции.");
Иначе
    ВызватьИсключение "Введен неверный пароль!";
КонецЕсли;

Функция самостоятельно вычисляет сопоставимое значение для переданной строки и сравнивает его с реальным хэшем пользователя ИБ, возвращая результат в булевый параметр Совпадает.

Решение 2. Программное хэширование и работа со свойствами пользователя

Если необходимо реализовать проверку вручную или проанализировать механизм хэширования данных, рассмотрим доступные средства платформы. Для получения хэш-суммы произвольной строки в 1С применяется объект ХешированиеДанных.

Посмотрим на пример получения хэша строки с использованием алгоритма SHA256:


// Вычисление хэша произвольной строки
Хешер = Новый ХешированиеДанных(ХэшФункция.SHA256);
Хешер.Добавить("ВведеннаяСтрокаПароля");

СтрокаХэша = XMLСтрока(Хешер.ХэшСумма);
Сообщить("Сгенерированный хэш: " + СтрокаХэша);

Важно учесть, что платформа 1С для свойства СохраняемоеЗначениеПароля исторически использует комбинацию хэшей алгоритма SHA-1 (включая вариант строки в верхнем регистре). Поэтому прямое сравнение результата SHA256 с системным свойством не даст совпадения. Если требуется точное совпадение с системным хэшем платформы, рекомендуется использовать вышеописанную функцию БСП или встроенные методы платформы современных версий.

Альтернативные архитектурные подходы

Разберем ситуации, когда проверка пароля ИБ оказывается не самым удобным решением для бизнес-процесса:

  1. Отдельный PIN-код или пароль в справочнике: Если пользователи регулярно работают под общей учетной записью в торговом зале, логичнее создать дополнительный реквизит (или отдельный защищенный регистр сведений) для хранения индивидуального PIN-кода сотрудника. Это позволит менять оперативный код без изменения основного пароля учетной записи 1С.
  2. Смена текущего пользователя сеанса: Вместо постоянного ввода пароля при проведении каждого документа можно вынести на форму кнопку «Сменить пользователя» и при успешном вводе данных перезаписывать параметр сеанса ТекущийПользователь.
  3. Авторизация по штрихкоду или бейджу: Для работы на торговых точках наиболее эффективен ввод персонального штрихкода с помощью сканера. Это ускоряет работу персонала и исключает необходимость ввода символов с клавиатуры.
← На главную