Работа с паролями пользователей
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Я столкнулся с тем, что после переноса базы с помощью перехода в облачный сервис сбрасываются пароли пользователей.
Появилась идея написать обработку, с помощью которой я перенесу пароли пользователей из одной базы в другую.
В процессе реализации в обработке появились следующие возможности:
1. Получение списка пользователей с отображением хеш паролей и признака защита от опасных действий
2. Если сохранить таблицу в виде табличного документа, то полученный файл можно загрузить с помощью этой же обработки в другой базе
3. Просмотр хеш произвольного пароля, и отбор тех пользователей, у кого такой пароль до сих пор установлен.
4. Можно любому пользователю внести новое значение хеш пароля.
Процедура ЗаполнитьПользователей() заполняет табличную часть обработки.
&НаСервере
Процедура ЗаполнитьПользователей()
Объект.ПользователиИБ.Очистить();
МассивПользователейИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекПользователь Из МассивПользователейИБ Цикл
НоваяСтр = Объект.ПользователиИБ.Добавить();
НоваяСтр.Имя = ТекПользователь.Имя;
НоваяСтр.ПолноеИмя = ТекПользователь.ПолноеИмя;
НоваяСтр.УникальныйИдентификатор = Строка(ТекПользователь.УникальныйИдентификатор);
НоваяСтр.ХешПароля = ТекПользователь.СохраняемоеЗначениеПароля;
// в разных версиях платформы может не работать
Попытка
НоваяСтр.ЗащитаОтОпасныхДействий = ТекПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях;
Исключение
КонецПопытки;
КонецЦикла;
КонецПроцедуры
В поле СохраняемоеЗначениеПароля были значения, типа Ib0S3Bg/dA7nbye3jrOcitlyp1c=,jnODoRNp0WhNqBgIvOOhy0CmqnY=
Я узнал, что в поле СохраняемоеЗначениеПароля хранится не сам пароль, а его хеш функция, сформированная из строки пароля по алгоритму SHA-1 и упакованная по алгоритму base64. При этом, там через запятую есть 2 части, одна для пароля, а вторая для пароля в верхнем регистре.
Для проверки некоторых паролей я создал функцию, которая возвращает хеш по этому алгоритму.
&НаСервере
Функция ВычислитьХешПароля(ПарольДляПроверки)
//вычисляем хеш для строки
АлгоритмШифрования = Новый ХешированиеДанных(ХешФункция.SHA1);
АлгоритмШифрования.Добавить(ПарольДляПроверки);
ХешСуммаПароля = Base64Строка(АлгоритмШифрования.ХешСумма);
ХешПароля = ХешСуммаПароля+",";
//и добавляем через запятую хеш для паролья в верхнем регистре
АлгоритмШифрования = Новый ХешированиеДанных(ХешФункция.SHA1);
АлгоритмШифрования.Добавить(ВРег(ПарольДляПроверки));
ХешСуммаПароляВВерхнемРегистре = Base64Строка(АлгоритмШифрования.ХешСумма);
ХешПароля = ХешПароля+ ХешСуммаПароляВВерхнемРегистре;
Возврат ХешПароля;
КонецФункции
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.194.23
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.37.14
Вступайте в нашу телеграмм-группу Инфостарт