Авторизация в 1С одноразовым паролем

"Забыв логины и пароли 
мы чушь прекрасную пороли"

Федор Иващенко (C)

***

— Скажи пароль!
— Что? 
— Не тот. 
— Сейчас же откройте! 
— Вообще не тот. 

Рапунцель: Запутанная история (Tangled)

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

Вот список этих "нюансов":

  1. Дилеры не должны видеть список пользователей 1С. Многие знания - многие печали.
  2. Дилер может войти только под собой и не под кем иным. Даже если менеджер сольет свой пароль.
  3. Система доступа должна быть закрытой от брутфорса. В 1С нет встроенной защиты от перебора паролей, а народ нынче ушлый. А информация в системе достаточно интересная для определенной категории лиц.
  4. Необходимо жестко привязать пользователя к чему-то. Т.е. просто связка логин-пароль не прокатит. Нужен какой-то признак, что это именно тот пользователь.
  5. Обмен должен осуществляться по HTTPS. Это уже стандарт - обмен через каналы общего пользования - значит шифрование. Но 1С в нашем случае не смотрит наружу и не имеет внешнего адреса.

Вариантов решения несколько. Самый простой - ВПН. Правда нюансы все порят и выходит, что ВПН - не вариант. К тому же это внешние пользователи. Т.е. необходимо обеспечить работоспособность без установки ПО и вмешательства системных администраторов.  

Так родилась идея. А что если реализовать аутентификацию на nginx. Там мы можем творить, что пожелаем. А уж когда мы идентифицируем пользователя, мы его пустим в 1С. А чтобы не было сомнений, что этот тот, кто нам нужен, мы привяжем пользователя 1С к его мобильному телефону. А пароль сделаем одноразовым.

Посидели, покумекали и у нас все получилось.

Дилер заходит на страничку авторизации. Средствами nginx выводится страница для ввода логина и пароля

Mobirise

Логин Дилер получает от нас. Далее Дилер набирает специальный номер. И ему голосом диктуется одноразовый пароль из 6 цифр. И начинает работать связка логин-пароль. До звонка этой связки просто не существовало. Чтобы звонок был бесплатным циферки диктуются вместо гудков вызова, т.е. без поднятия трубки с нашей стороны. Астерикс и так умеет. Ну с нашей помощью конечно. Можно пароль рассылать через СМС, но это деньги, а нам хотелось на халяву. Можно пароль посылать в мессенджеры, но их так много разных. Наш вариант будет работать даже у Нео на Nokia 8110. 

После авторизации включается прокси для данного конкретного окна браузера, а пароль обнуляется. Т.е. далее данная связка логин-пароль не существует. Модуль ngx_http_upstream_module пробрасывает входящие запросы на внутренний веб-сервер.А в заголовки запросов подставляются параметры авторизации 1С, которые привязаны к данному логину и телефону. Там не все получилось сразу, 1С очень скупа на техническую информацию, но мы были очень упорны и уговорили 1С жрать авторизацию из заголовков. 1С просто не знала с кем связалась.

Если набрать номер с левого телефона, то в ответ будет тишина и одноразовый пароль не будет сгенерирован.

Таким образом мы закрыли все вопросы:

  1. Дилер знает только свой логин в системе авторизации nginx. Список пользователей 1С не выводится.
  2. Дилер со своего телефона может авторизоваться только под собой. Без вариантов. К каждому логину привязан только один телефон.
  3. До звонка связки логин-пароль вообще не существует, поэтому ее невозможно подобрать. На ввод пароля Дилеру дается 5 минут, после это пароль обнуляется и его надо запрашивать снова.Так же пароль обнуляется после успешной авторизации.
  4. Звонок на запрос пароля можно сделать только с определенного, привязанного к Дилеру, телефона. Никакие другие телефоны не прокатят. Связка телефон-логин - жесткая.
  5. Окно браузера работает через https, сервер 1С не имеет внешних точек входа. Поскольку к 1С извне, мимо nginx, подобраться невозможно, то будем считать, что непосредственно 1С от атак ограждена.

Надеюсь наш способ поможет Вам реализовать подобные задачи, возникающие в Вашей практике.

Напишите нам

Готовы к предложениям и сотрудничеству

Телефон: +7 (4922) 47-90-31 
Email: info@infos33.ru

© Copyright ООО "Инфосервис", г. Владимир - All Rights Reserved