Недавно столкнулся с проблемой, которая потребовала простенького решения. Собственно, проблему можно уместить в один вопрос: как помочь пользователю, не зная и не сбрасывая его пароль?
Во многих конторах, чтобы воспроизвести ошибку, администраторы, программисты и прочие технические специалисты пользовались Аутентификацией 1С: Предприятия. То есть пользователь «жаловался» на ошибку, под ним заходили специалисты и пытались воспроизвести ошибку. Получали ошибку и исправляли ее в коде.
С развитием мобильной платформы и мобильных клиентов Аутентификация 1С: Предприятия становится «занята» пользователем, так как синхронизация проходит именно по ней. То есть не каждый пользователь захочет разглашать свои пароли или пользоваться тем паролем, что ему «назначили». Наша контора также все больше и больше подвязывается с мобильными клиентами. Вот тут и возник упомянутый ранее вопрос.
Я перерыл просторы интернета, нашел кучу описаловок как ломать пароли в файловой БД или в серверных версиях.
В случае с файловой версией не нужно ни каких прав достаточно установить программу просмотра файлов баз *.1CD и меняем пароли в таблице V8USERS. Стоит заметить, что пароли там хранятся не в чистом виде, а хранится хеш пароля. Собственно хеш неизвестного пароля меняется на хеш известного пароля. В случае серверных баз нужно знать логин администратора БД и там уже дело не хитрое поменять пароль. Но как объяснить пользователю ошибку аутентификации после таких взломов? Да и к чему такие трудности?
Нашел так же обработку, которая подбирает пароли при этом требует такие же права как и моя обработка. Ну подбирает пароль 123 или даже 123456 она быстро, а что если пароль настоящий? Она пишет около 90 дней буду подбирать. Это не в какие ворота! Может выйти такая ситуация, пока подбирали пароль, пользователь сменил пароль. Да еще и не 1 раз может сменить.
В общем предлагаю небольшую обработку, которая меняет хеш неизвестного пароля на хеш желаемого пароля, а затем подменяет обратно. Работает она как в Управляемых формах, так и под обычные формы. Может быть встроена через «дополнительные обработки и отчеты», процедура в модуль объекта с описанием обработки добавлена.
Ну или можно встроить через «Расширения конфигурации» — очень полезная возможность, на данный момент позволяет добавлять обработки и отчеты в конфигурацию не снимая ее с поддержки. То есть типовая конфигурация остается типовой даже при добавлении обработки.
Принцип работы:
По пользователю получаем хеш пароля.
//Пользователь элемент справочника Пользователи
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
//СохраняемоеЗначениеПароля хранит хеш пароля
ПарольПользователя = ПользовательИБ.СохраняемоеЗначениеПароля;
//Имя хранит логин пользователя
ЛогинПользователя = ПользовательИБ.Имя;
Вводим желаемый пароль и получаем его хеш.
Меняем хеш пользователя на хеш желаемого пароля.
Входим в систему под новым паролем. Меняем все обратно.
Ссылка на скачивание обработки
Комментарии (24)
Razaz
27.01.2016 12:09А по нормальному сделать там никак? Подцепить OpenID Connect провайдера или ADFS хотя бы?
Apatic
27.01.2016 12:28По OpenId точно можно.
Razaz
27.01.2016 12:41Это OpenId, а я про OpenId Connect, это который базируется на OAuth2.
mayorovp
28.01.2016 13:24Уточнение: 1C работает со второй версией OpenId, а OpenId Connect — это третья.
Razaz
28.01.2016 13:33OpenId Connect это не OpenId вообще)) http://openid.net/connect/faq/
Это разные протоколы. По сути OIDC — дополнение OAuth2.mayorovp
28.01.2016 13:44По вашей же ссылке.
What is the history of OpenID?
OpenID Connect is the third generation of OpenID technology.Razaz
28.01.2016 13:47Это ревизия подхода. OpenId 1 и 2 вообще никак не относятся к Connect кроме названия OpenId.
mayorovp
28.01.2016 13:56Как вы думаете, почему это самое название OpenId — общее?
Razaz
28.01.2016 14:01Вы издеваетесь? Это разные протоколы. OpenId — мертвый протокол. OpenId Connect — расширение OAuth2. Надо было назвать OAuth2 Connect, тогда это лучше бы отражало действительность и не путало народ.
Но к сожалению организация срастила свое имя с протоколом. И сейчас деваться некуда.
mayorovp
28.01.2016 13:18Не надо соединять союзом «или» технологию и конкретную реализацию. ADFS — это реализация провайдера WS-Federation от Microsoft.
Razaz
28.01.2016 13:34Я написал «OpenID Connect провайдера».
mayorovp
28.01.2016 13:43Не надо соединять союзом «или» технологию и конкретную реализацию [другой технологии].
Razaz
28.01.2016 13:46OpenID Connect провайдер — указатель на систему выполняющую роль. Например Forgerock OpenAM. ADFS — кстати является OpenId Connect провайдером на 2016 серваке. Просто WS-Fed гораздо проще вкрутить если неохота разбираться.
utyv
28.01.2016 14:13Может кому пригодится, есть другое решение, совсем без обработок.
Если пользователь использует аутентификацию по паролю, можно включить ему аутентификацию Windows, причем указать свою собственную учетную запись домена. Вуаля — входим под его именем. Главное не забыть потом вернуть все обратно.
Если пользователь использует аутентификацию Windows, и ему не присвоен пароль, мы можем временно назначить свой пароль и войти.
Если только по каким-то причинам есть и пароль и привязка к виндовой учетке, тогда ой.dsdred
28.01.2016 14:20Не катит твое «решение».
1 Пользователи и вообще у многих используют аутентификацию винды.
2 По мимо клиента обычного используют мобильного.
3 Кстати если что бесшовная интеграция да и все вэб сервисы кстати используют Аутентификацию 1С: Предприятия.
Если бы Вы почитали внимательно статью то не писали то что написали…Dementor
29.01.2016 01:24utyv ничего не пишет про универсальность: «Может кому пригодится, есть другое решение, совсем без обработок.»
По моим наблюдениям доменная аутентификация очень распространена и при этом пароль на обычный вход не ставят вообще — заходи под кем хочешь.
По поводу вашей обработки. Интересно. Ранее правил хеши вручную, а потом возвращал назад. Возьму вашу идею на вооружение.
Но думаю, что обработку можно сделать более удобной. Ведь в вашей реализации все еще нужно вручную запускать новую сессию, не потерять старый хеш, не забыть вернуть пароль… Но ведь можно по нажатию на кнопку сменить хеш, запустить второй сеанс под нужным пользователем/паролем и тут же сменить пароль на предыдущий. А если на форму выбросить целую табличку пользователей, то можно получить диспетчер тестирования (если лицензий на все сеансы хватит).dsdred
29.01.2016 07:38По моим наблюдениям доменная аутентификация очень распространена и при этом пароль на обычный вход не ставят вообще — заходи под кем хочешь.
Ну наверное в конторах с файловой версией и с небольшим количеством пользователей 1С и с отсутствующим штатным администратором и программистом 1с действительно так. Я в маленьких конторах не работал, только подрабатывал.
Но думаю, что обработку можно сделать более удобной. Ведь в вашей реализации все еще нужно вручную запускать новую сессию, не потерять старый хеш, не забыть вернуть пароль… Но ведь можно по нажатию на кнопку сменить хеш, запустить второй сеанс под нужным пользователем/паролем и тут же сменить пароль на предыдущий. А если на форму выбросить целую табличку пользователей, то можно получить диспетчер тестирования (если лицензий на все сеансы хватит).
Да тут вы правы можно сделать удобней. Моя обработка лишь показывает принцип как это делается, ну и удовлетворяет мои «хотелки».Поэтому я и написал «простенькая обработка». А так даже типовые 1с обработки под себя приходится пилить.
По поводу предложенного:
1 Получается надо добавить чекбокс «Запускать клиент из обработки». Данный чек бок делает видимым/доступным либо выбор из списка либо переключатель на доступные значения:
-Конфигуратор
-Клиент
На ту же кнопку весим проверку и процедуру запуска вышеописанного.
2 Диспетчер тестирования сделать не трудно кстати. Идея интересная, но это уже совсем другая обработка.
utyv
29.01.2016 08:51По моим наблюдениям доменная аутентификация очень распространена и при этом пароль на обычный вход не ставят вообще — заходи под кем хочешь.
не совсем так. Если пароль не ставим — то не надо ставить галку «Аутентентификация 1С: Предприятия». Тогда кто угодно не сможет зайти без пароля.Dementor
29.01.2016 10:49Если есть полные права, то такую галочку можно поставить в любой момент. Если прав нет, то и обработка не поможет.
Ну наверное в конторах с файловой версией и с небольшим количеством пользователей 1С и с отсутствующим штатным администратором и программистом 1с действительно так. Я в маленьких конторах не работал, только подрабатывал.
Не поверишь, как раз на серверных базах в средних торговых компаниях, у которых были в штате администратор и иногда собственные 1С-программисты :) Через AD удобнее заниматься администрированием списка пользователей и нет проблемы маленьких компаний, когда все подряд заходят под учеткой человека, который уволился еще несколько лет назад, а потом по журналам регистрации не найти крайних. И кстати, для маленьких компаний поднять и обслуживать домен обычно кишка тонка.
Apatic
Мне кажется, вам, скорее, на инфостарт.
cruzo
Сейчас закидают минусами, но я все же скажу. Ребята, если вы считаете, что массовость статей на тему web, desktop, mobile программирования задает правила написания статей для авторов, то, возможно, вы забыли что такое Хабр. Цитата с Википедии: «Хабраха?бр (он же Хабр) — многофункциональный сайт, представляющий собой смешение новостного сайта и коллективного блога (специализированная пресса), созданный для публикации новостей, аналитических статей, мыслей, связанных с информационными технологиями, бизнесом и Интернетом[2]. „
Apatic
Да просто на инфостарте целевая аудитория гораздо больше, вот и все.
dsdred
На инфостарте есть пункт 11 правил публикаций.
11. Запрещается публиковать программы, которые могут носить вредоносный характер при использовании злоумышленником (взлом и подбор паролей).
Но при этом программа с помощью которой ломают файловые версии лежит на инфостарте.
Двойные стандарты…