Перейти к содержимому

Разработка мобильных приложений 1С — Аутентификация пользователя

Разработка мобильных приложений 1С - Аутентификация пользователя

Часть 0: Разработка мобильных приложений 1С – Быстрый старт!
Часть 1: Разработка мобильных приложений 1С — Аутентификация пользователя.
Часть 3: Разработка мобильных приложений 1С — Обмен данными.

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

Демонстрация работы мобильного приложения 1С:

Блок-схема работы мобильного приложения 1С:

Схема и принцип работы мобильного приложения 1С
Схема и принцип работы мобильного приложения 1С

Примечание:

  1. Для простоты старта, без использования протокола HTTPS и соответствующих сертификатов.
  2. Логин пользователя и номер телефона должны быть заранее заведены в основной базе данных.
  3. Для взаимодействия и хранения паролей используется только хеш-сумма пароля. Для большей безопасности необходимо использовать так называемую «Соль».
    💡 Что такое хеш: https://ru.wikipedia.org/wiki/Хеш-функция
    💡 Что такое «Соль»: https://ru.wikipedia.org/wiki/Соль_(криптография)
  4. Смартфон находится в локальной сети по Wi-Fi, для того чтобы реализовать весь функционал в более глобальном масштабе необходимо публиковать HTTP сервисы на публичных серверах с «белыми» IP адресами.
  5. При разработке не используются принципы программирования, о которых более подробно рассказано в радио-подкасте Никиты Зайцева «Радио 1С Энтерпрайз».

В текущий момент, в 1С существуют три варианта разработки приложения:

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

Изображение взято с адреса https://its.1c.ru/db/edtdoc#content:10511:hdoc

2. Мобильный клиент.
Мобильный клиент 1С
Мобильный клиент 1С
Цитата с ИТС: является аналогом тонкого клиента для обычного компьютера, использующего для доступа к информационной базе веб-сервер. Другими словами, при работе мобильного клиента на мобильном устройстве отсутствует информационная база. В мобильном клиенте клиентский код исполняется на мобильном устройстве, а серверный код исполняется на сервере приложений. При этом, как очевидно, сервер приложений функционирует не на мобильном устройстве. Так как на мобильном устройстве отсутствует информационная база, то это означает, что мобильный клиент работает только в том случае, если между мобильным устройством и веб-сервером существует соединение. Мобильный клиент не может работать в режиме офлайн.

Изображение взято с адреса https://its.1c.ru/db/edtdoc#content:10505:hdoc

3. Мобильный клиент с автономным режимом.
Мобильный клиент автономный
Мобильный клиент автономный
Цитата с ИТС: это мобильный клиент, для которого доступна возможность работы в автономном режиме, т. е. без подключения к информационной базе. Для того чтобы прикладное решение могло работать в автономном режиме, необходимо более существенно доработать приложение, которое может работать в мобильном клиенте. Для мобильного клиента с автономным режимом требуется выбрать набор метаданных, которые доступны в автономном режиме, реализовать формы автономного режима и способы синхронизации данных в информационной базе. С точки зрения сложности разработки, мобильный клиент с автономным режимом находится между мобильным клиентом и мобильным приложением.

Изображение взято с адреса https://its.1c.ru/db/edtdoc#content:10510:hdoc

Установка на устройство доступно в двух видах:
  1. Публикация конфигурации для мобильной платформы 1С на веб-сервере, с последующей загрузкой на устройстве.
  2. Сборка apk-файла с помощью сборщика мобильных приложений, с последующей установкой либо напрямую в устройство либо через Google Play.

1. Подготовительные действия.

1.1 Установить платформу 1С на компьютере.

Где взять? Настоятельно рекомендую приобрести Комплект для специалиста по разработке, а так же при необходимости мини-сервер 1С, пока есть возможность купить все это по низким ценам: https://1c.ru/news/info.jsp?id=27081

1.2 Установить веб-сервер Apache.

В разработке не только для 1С использую Open Server, цитата с сайта «программный комплекс включает в себя тщательно подобранный набор серверного программного обеспечения, а также невероятно удобную и продуманную управляющую утилиту, которая обладает мощными возможностями по администрированию и настройке всех доступных компонентов.» Отлично, то что нам нужно, но здесь есть нюансы использования, а именно то что Apache устанавливается как приложение и не регистрируется как служба. Дело в том, что 1С при публикации использует следующие методы поиска веб-сервера: https://its.1c.ru/db/v8320doc#bookmark:adm:TI000000771.

Что для этого необходимо сделать:

В настройках Open Server, выбрать все допустимые IP адреса:

Все доступные IP
Все доступные IP

Зарегистрировать Apache как службу, установить тип запуска «Вручную»:

В «Командной строке» (запущенной от имени администратора), необходимо перейти в папку где расположен файл «httpd.exe», в моем случае это путь «C:\OpenServer\modules\http\Apache_2.4-PHP_8.0\bin», с помощью команды:

cd C:\OpenServer\modules\http\Apache_2.4-PHP_8.0\bin

Далее выполнить команду:

httpd -k install

Установка службы Apache
Установка службы Apache

После установить тип запуска службы «Вручную»:
Тип запуска Apache
Тип запуска Apache

1.3 Устройство на ОС Андроид.

В текущей статье разработка будет идти сразу на реальное устройство, без эмуляторов. Для этого, необходимо установить мобильную платформу на ваше устройство. Как это сделать? Просто!

Включить опцию «Неизвестные источники»:

Временно, на устройстве включаем опцию «Неизвестные источники», которая позволит устанавливать приложения миную Google Play, напрямую с помощью apk файла:

Неизвестные источники
Неизвестные источники

Скачать и установить мобильную платформу:

Скачиваем zip файл с адреса https://releases.1c.ru/project/mobile в моем случае это версия 8.3.20.37. Распаковываем архив и в папке «Android» видим множество файлов apk, нам нужен файл “1cem-arm.apk”. Более подробное описание файлов apk можно прочесть по адресам: https://its.1c.ru/db/edtdoc#content:10430:hdoc и https://its.1c.ru/db/v8320doc#bookmark:dev:TI000002024.
Выбранный apk файл копируем на Android устройство, находим его в телефоне и устанавливаем, просто запустив его.

2. Разработка основной базы.

Согласно выше представленной блок-схемы, обращения к основной базе возникают в трех случаях:

  • Запрос пароля — Пользователь впервые входить в мобильное приложение (сканирует QR-код), в этом случае ввод пароля не доступен, тогда он нажимает «Запросить пароль» и выполняется HTTP запрос к основной базе данных, в которой генерируется новый пароль и отправляется в SMS.
  • Восстановление пароля — Пользователь не помнить пароль, нажимает «Восстановить пароль», выполняется HTTP запрос к основной базе, в которой генерируется новый пароль и отправляется в SMS.
  • Проверка пароля — Пользователь ввел пароль, выполняется HTTP запрос к основной базе данных, где необходимо сверить полученный хеш с тем, что хранится в основной базе данных и выдать результат проверки.

По сути запрос и восстановление пароля делают одно и тоже, но в дальнейшем такое разделение может быть полезным.

Давайте реализуем все три HTTP сервиса и один вспомогательный для проверки, для этого необходимо:

2.1. Запустить платформу 1С от имени Администратора.

2.2. Создать пустую конфигурацию.

2.3. Добавить HTTP-сервис с именем «СервисАутентификации».

💡 Что такое «Авторизация» — https://ru.wikipedia.org/wiki/Авторизация и что такое «Аутентификация» — https://ru.wikipedia.org/wiki/Аутентификация

Зададим корневой URL: authentication

2.4. Добавить проверочный шаблон URL.

В свойстве «Шаблоны URL» добавляем шаблон с именем «Ping» и HTTP-методом «GET», обработчик которого будет содержать следующий код:

Шаблон URL Ping
Шаблон URL Ping

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

2.5. Тестовая публикация основной базы.

Обновляем конфигурацию базы данных, после создаем папку «C:\PublishedServices», далее в конфигураторе «Администрирование» – «Публикация на веб-сервере…», отключаем все опции и оставляем только наш HTTP сервис.
Проверьте, что флажок «Open Server Panel» красного цвета, то есть сервер остановлен. Обратите внимание, что имя публикуемой базы, было изменено на «AuthenticationService», во избежание проблем с кириллицей в строке адреса. При запросе на перезапуск веб-сервера, ответьте отказом, так как запуск будет осуществляется вручную.

Публикация на веб сервере
Публикация на веб сервере

2.6. Перенос настроек публикации.

После публикации HTTP сервиса с помощью 1С, нужно будет один раз перенести настройки в конфигурационных файлах Apache — это действие необходимо так как «Open Server Panel» использует шаблон конфигурационного файла, которой при каждом старте, копируется в основной файл настройки сервера Apache. Для этого из файла:

C:\OpenServer\modules\http\Apache_2.4-PHP_8.0\conf\httpd.conf

в файл:

C:\OpenServer\userdata\config\Apache_2.4-PHP_8.0_server.conf

перенести следующие настройки:

Перенос настроек публикации
Перенос настроек публикации

После уже не придется переносить настройки, делается это только при первой публикации, но если изменятся какие либо параметры или добавляется новый сервис, тогда необходимо повторить действия по переносу.

2.7. Проверка тестовой публикации.

Проверим наш опубликованный HTTP-сервис, с помощью шаблона «Ping», для этого в браузере необходимо перейти по адресу:

http://localhost/AuthenticationService/hs/authentication/ping

В результате должна быть отображена страница с текстом «Pong».

Осталось реализовать три основных метода сервиса аутентификации, для этого необходимо добавить недостающие объекты конфигурации.

2.8. Добавляем регистр сведений «ДанныеПользователей».

Непериодический, независимый регистр сведений «ДанныеПользователей», со следующей структурой:
— Измерение «ЛогинПользователя», тип строка, длина 4 символа.
— Ресурс «НомерТелефона», тип строка, маска «79999999999», длина 11 символов.
— Ресурс «ХешПароля», тип строка, длина 100 символов.

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

2.9. Добавляем основные шаблоны URL.

В HTTP сервис «СервисАутентификации» добавляем соответствующие шаблоны URL:

  • PasswordRequest — запрос пароля, метод GET, шаблон: /PasswordRequest/{login}
  • PasswordRecovery — восстановление пароля, метод GET, шаблон: /PasswordRecovery/{login}
  • PasswordCheck — проверка пароля, метод GET, шаблон: /PasswordCheck/{login}/{hash}

Так как, по сути запрос и восстановление пароля делают одно и тоже, то вызывают они одну и туже функцию, которая по входящему логину, читает из регистра сведений данные о пользователе, генерирует новый случайный пароль, формирует и обновляет хеш-сумму пароля и отправляет SMS пользователю:

Функция PasswordRequestGET(Запрос)
	Возврат ГенерацияПароля(Запрос);
КонецФункции

Функция PasswordRecoveryGET(Запрос)
	Возврат ГенерацияПароля(Запрос);
КонецФункции

Функция ГенерацияПароля(Запрос)
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
	
	#Область ПроверкаВходящихПараметров
	
	ЛогинПользователя = Запрос.ПараметрыURL.Получить("login");
	Если ЛогинПользователя = Неопределено Тогда
		
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.УстановитьТелоИзСтроки("Не задан параметр login.");
		Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
		
		Возврат Ответ;
		
	КонецЕсли;                          
	
	#КонецОбласти
	
	#Область ПолучениеДанныхПользователя
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДанныеПользователей.НомерТелефона КАК НомерТелефона
		|ИЗ
		|	РегистрСведений.ДанныеПользователей КАК ДанныеПользователей
		|ГДЕ
		|	ДанныеПользователей.ЛогинПользователя = &ЛогинПользователя";
	
	Запрос.УстановитьПараметр("ЛогинПользователя", ЛогинПользователя);
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.УстановитьТелоИзСтроки("Пользователь не найден.");
		Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
		
		Возврат Ответ;
	
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	Выборка.Следующий();
	
	НомерТелефона = Выборка.НомерТелефона;
	
	#КонецОбласти
	
	#Область ГенерацияПароляИХеша
	
	ГенераторПаролей = Новый ГенераторСлучайныхЧисел();
	НовыйПароль = ГенераторПаролей.СлучайноеЧисло(1000, 9999);
	
	НовыйПароль = Формат(НовыйПароль, "ЧГ=0");

	Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
    Хеширование.Добавить(НовыйПароль);
	ХешПароля = Хеширование.ХешСумма;
	
	МенеджерЗаписи = РегистрыСведений.ДанныеПользователей.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.ЛогинПользователя	= ЛогинПользователя;	
	МенеджерЗаписи.НомерТелефона		= НомерТелефона;	
	МенеджерЗаписи.ХешПароля			= ХешПароля;
	
	Попытка
		МенеджерЗаписи.Записать();	
	Исключение
		
		ЗаписьЖурналаРегистрации("СервисАутентификации.ГенерацияПароля", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
		
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.УстановитьТелоИзСтроки("Ошибка генерации пароля.");
		Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
		
		Возврат Ответ;
	
	КонецПопытки;
	
	#КонецОбласти
	
	#Область ОтправкаSMS
	
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());   
	
	СоединениеДляОтправкиSMS = Новый HTTPСоединение("sms.ru", , , , , , ЗащищенноеСоединение);
	
	СтрокаЗапроса = СтрШаблон("/sms/send?api_id=***&to=%1&msg=Ваш+пароль:+%2&json=1", НомерТелефона, НовыйПароль);
	
	ЗапросОтправкиSMS = Новый HTTPЗапрос(СтрокаЗапроса);
	
	РезультатОтправки = СоединениеДляОтправкиSMS.Получить(ЗапросОтправкиSMS);
	
	Если РезультатОтправки.КодСостояния = 200 Тогда                   
		
		Ответ.УстановитьТелоИзСтроки("Пароль отправлен.");
		ЗаписьЖурналаРегистрации("СервисАутентификации.ГенерацияПароля", УровеньЖурналаРегистрации.Информация, , , РезультатОтправки.ПолучитьТелоКакСтроку());
		
	Иначе                                                 
		
		Ответ.УстановитьТелоИзСтроки("Ошибка отправки пароля: " + Ответ.КодСостояния);                         
		
		СтрокаОтправки = РезультатОтправки.КодСостояния + Символы.ПС + РезультатОтправки.ПолучитьТелоКакСтроку();
		ЗаписьЖурналаРегистрации("СервисАутентификации.ГенерацияПароля", УровеньЖурналаРегистрации.Ошибка, , , СтрокаОтправки);
		
	КонецЕсли;
	
	#КонецОбласти
	
	Возврат Ответ;

КонецФункции

Отправка SMS осуществляется с помощью сервиса https://sms.ru, вы можете воспользоваться удобным для вас методом, например, PUSH уведомлением или сообщение в Telegram, о том как это сделать, описано в статье: Телеграм бот 1С.

Обновляем конфигурацию базы данных и запускаем в режиме «1С:Предприятие», добавляем пользователя, например с логином «0000» и корректным номером телефона, в формате «79999999999».

Далее воспользуемся браузером, где в строке адреса вводим:

http://localhost/AuthenticationService/hs/authentication/PasswordRequest/1234

В результате должен быть получен текст «Пользователь не найден.», так как логина «1234» не существует в нашей базе.

Проверим генерацию пароля, хеша и отправку SMS, по адресу:

http://localhost/AuthenticationService/hs/authentication/PasswordRequest/0000

В данном случае, логин «0000» присутствует в основной базе данных и SMS сообщение успешно отправляется.

Проверяем что хеш пароля сохранился и SMS пришло на телефон:

Хеш пароля сохранен
Хеш пароля сохранен

Осталось реализовать проверку хеша пароля, введенного пользователем в мобильном приложении, с тем что хранится в основной базе данных, для этого прямо в обработчике шаблона URL «PasswordCheckGET» пишем следующий код:

Функция PasswordCheckGET(Запрос)
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
	
	#Область ПроверкаВходящихПараметров
	
	// Шаблон URL: /PasswordCheck/{login}/{hash}
	
	ЛогинПользователя = Запрос.ПараметрыURL.Получить("login");
	Если ЛогинПользователя = Неопределено Тогда
		
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.УстановитьТелоИзСтроки("Не задан параметр login.");
		Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
		
		Возврат Ответ;
		
	КонецЕсли;
	
	ХешИзМобильногоПриложения = Запрос.ПараметрыURL.Получить("hash");
	Если ХешИзМобильногоПриложения = Неопределено Тогда
		
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.УстановитьТелоИзСтроки("Не задан параметр hash.");
		Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
		
		Возврат Ответ;
		
	КонецЕсли; 
	
	#КонецОбласти
	
	#Область ПолучениеДанныхПользователя
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДанныеПользователей.ХешПароля КАК ХешПароля
		|ИЗ
		|	РегистрСведений.ДанныеПользователей КАК ДанныеПользователей
		|ГДЕ
		|	ДанныеПользователей.ЛогинПользователя = &ЛогинПользователя";
	
	Запрос.УстановитьПараметр("ЛогинПользователя", ЛогинПользователя);
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.УстановитьТелоИзСтроки("Пользователь не найден.");
		Ответ.Заголовки.Вставить("Content-type", "text/plain; charset=utf-8");
		
		Возврат Ответ;
	
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	Выборка.Следующий();
	
	ХешПароля = Выборка.ХешПароля;
	
	#КонецОбласти
	
	#Область ПроверкаПароля
	
	Ответ.УстановитьТелоИзСтроки(ХешИзМобильногоПриложения = ХешПароля);
	
	#КонецОбласти
	
	Возврат Ответ;
	
КонецФункции

Обновляем конфигурацию основной базы данных и в браузере используем следующий адрес:

http://localhost/AuthenticationService/hs/authentication/PasswordCheck/0000/123

Из него следует, что логин «0000» указан верно, но хеш пароля не верный, в результате будет выведено слово «Нет». Если вместо «123» использовать правильный хеш из основной базы, тогда проверка будет пройдена. Следующим шагом, будет разработка мобильного приложения 1С.

3. Разработка мобильного приложения на 1С.

3.1. Создание мобильной конфигурации.

Запускаем платформу 1С от имени администратора и создаем пустую конфигурацию, задаем ей имя «МобильноеПриложение» и в «Назначения использования» указываем «Приложение для мобильной платформы». Далее, в параметре «Используемая функциональность мобильного приложения», добавляем опцию «Камера».

3.2. Настройка взаимодействия с устройством.

Сразу настроим взаимодействие с мобильным устройством, для этого, публикуем мобильное приложение на веб-сервер, открываем меню «Конфигурация» – «Мобильное приложение» – «Публиковать…» и устанавливаем настройки согласно скриншоту, далее нажимаем «Опубликовать»:

Публикация мобильного приложения 1С
Публикация мобильного приложения 1С

На запрос о перезапуске веб-сервера и обновление мобильного приложения, отвечаем отрицательно, так как нужно перенести настройки публикации. Более подробнее о публикации мобильного приложения 1С: https://its.1c.ru/db/v8320doc#bookmark:dev:TI000000919

Так как выполняется новая публикация на веб-сервере Apache, нужно перенести настройки публикации из файла «C:\OpenServer\modules\http\Apache_2.4-PHP_8.0\conf\httpd.conf» в файл «C:\OpenServer\userdata\config\Apache_2.4-PHP_8.0_server.conf», как было показано выше, но в нашем случае добавляется новая публикация:

Перенос настроек публикации мобильного приложения
Перенос настроек публикации мобильного приложения

После перезапустите веб-сервер и проверьте доступ к публикации с помощью браузера, по адресу:

http://192.168.0.96/QRCodeLogin/

Должен загрузится XML файл:

XML файл публикации
XML файл публикации

Примечание:
В вашем случае IP адрес может быть другим, для того чтобы узнать его, воспользуйтесь инструкцией: https://lifehacker.ru/kak-uznat-ip-adres/

💡 Дополнительная информация по публикации см. в статье: Разработка мобильных приложений 1С

На устройстве запустите мобильную платформу 1С и добавьте опубликованное приложение, для этого нажать кнопку со знаком «+», ввести адрес:

http://192.168.0.96/QRCodeLogin/

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

3.3. Добавление объектов в мобильное приложение 1С.

▪ Добавляем константу «ХешПароля», тип «Строка», длина «100» с отключенной опцией «Использовать стандартные команды».
▪ Добавляем общую форму с наименованием «ФормаВходa» и устанавливаем ее в рабочую область начальной страницы:

Рабочая область начальной страницы
Рабочая область начальной страницы

В форме размещены следующие элементы:
— Команда «Вход».
— Декорация надпись «ДекорацияСообщение», которая послужит для вывода вспомогательных сообщений.

Модуль формы содержит следующий код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если НЕ СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
		
		Элементы.Вход.Доступность = Ложь;
		Элементы.ДекорацияСообщение.Заголовок = "Сканирование QR-кода не доступно.";
		
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура Вход(Команда)
	
	ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтотОбъект);
	СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Сканируйте QR-код", ОбработчикСканирования);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт

	СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов();
	
	Если НЕ Результат Тогда
		Элементы.ДекорацияСообщение.Заголовок = Сообщение;
		Возврат;
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ЛогинПользователя", Штрихкод);
	
	ОткрытьФорму("ОбщаяФорма.ФормаВводаПароля", ПараметрыФормы, ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	    	
КонецПроцедуры

&НаКлиенте
Процедура Ping(Команда)
	
	СоединениеДляПроверки = Новый HTTPСоединение("192.168.0.96", 80);
	
	ЗапросПроверки = Новый HTTPЗапрос("/AuthenticationService/hs/authentication/ping");
	
	РезультатОтправки = СоединениеДляПроверки.Получить(ЗапросПроверки);
	
	Сообщить(РезультатОтправки.ПолучитьТелоКакСтроку());
	
КонецПроцедуры

▪ Добавляем общую форму ввода пароля, с наименованием «ФормаВводаПароля», в которой размещены следующие элементы:
— Реквизит «Логин», с включенной опцией «ТолькоПросмотр».
— Реквизит «Пароль», тип «Строка», длина «4».
— Реквизит формы «ХешПароля», тип строка.
— Команда «Войти».
— Команда «ЗапроситьВосстановитьПароль», для запроса восстановления пароля из основной базы.

Модуль формы содержит следующий код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Логин = Параметры.ЛогинПользователя;
	
	ХешПароля = Константы.ХешПароля.Получить();    
	Если ЗначениеЗаполнено(ХешПароля) Тогда
		Элементы.ЗапроситьВосстановитьПароль.Заголовок = "Восстановить пароль";
	Иначе		                      
		Элементы.Войти.Видимость = Ложь;
		Элементы.ЗапроситьВосстановитьПароль.Заголовок = "Запросить пароль";	
	КонецЕсли;   
	
КонецПроцедуры

&НаКлиенте
Процедура Войти(Команда)
	
	ХешВведенногоПароля = ХешированиеПароля(Формат(Пароль, "ЧГ=0"));
	
	СоединениеДляПроверки = Новый HTTPСоединение("192.168.0.96");
	
	СтрокаЗапроса = СтрШаблон("/AuthenticationService/hs/authentication/PasswordCheck/%1/%2", Логин, ХешВведенногоПароля);
	
	ЗапросПроверки = Новый HTTPЗапрос(СтрокаЗапроса);
	
	РезультатПроверки = СоединениеДляПроверки.Получить(ЗапросПроверки);

	КодСостояния = РезультатПроверки.КодСостояния;
	РезультатПроверки = РезультатПроверки.ПолучитьТелоКакСтроку();
	
	Если КодСостояния = 200 И РезультатПроверки Тогда                   
		
		Сообщить("Привет, " + Логин);
		
	ИначеЕсли КодСостояния = 200 И НЕ РезультатПроверки Тогда            
		
		Сообщить("Неверный пароль!");
		
	Иначе	
		Сообщить(РезультатПроверки);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапроситьВосстановитьПароль(Команда) 
	
	СоединениеДляВосстановления = Новый HTTPСоединение("192.168.0.96", 80);
	
	СтрокаЗапроса = СтрШаблон("AuthenticationService/hs/authentication/PasswordRequest/%1", Логин);	
	
	ЗапросВосстановления = Новый HTTPЗапрос(СтрокаЗапроса);
	
	РезультатВосстановления = СоединениеДляВосстановления.Получить(ЗапросВосстановления);
	
	СтрокаОтвета = РезультатВосстановления.ПолучитьТелоКакСтроку();
	
	Если РезультатВосстановления.КодСостояния = 200 И СтрокаОтвета = "Пароль отправлен." Тогда
		
		Элементы.Войти.Видимость = Истина;
		Элементы.ЗапроситьВосстановитьПароль.Видимость = Ложь;
		
	Иначе
		Сообщить(СтрокаОтвета);		
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ХешированиеПароля(Пароль)
	
	Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
	Хеширование.Добавить(Пароль);
	Возврат Хеширование.ХешСумма;

КонецФункции

▪ Необходимо обновить публикацию мобильного приложения 1С на веб-сервере, для этого служит пункт меню «Конфигурация – Мобильное приложение – Обновить публикуемое приложение».
▪ На устройстве запустите мобильную платформу 1С, далее долгим нажатием в списке установленных конфигураций вызовите контекстное меню и выберите пункт «Обновить».

Сгенерируйте в любом удобном для вас сервисе QR-код с логином который заведен у вас в основной базе, для генерации QR-кода можно воспользоваться сервисом: http://qrcoder.ru/

Теперь можно протестировать разработанный функционал мобильного приложения 1С для аутентификации пользователя при помощи QR-кода.

💾 Конфигурация основной базы данных.
💾 Конфигурация мобильного прложения.

Источники информации:

Используемые изображения:

2 комментария для “Разработка мобильных приложений 1С — Аутентификация пользователя”

  1. Крутая статья. Интересно можно сделать чтобы для публикации доступ был только по смс без пароля?

  2. Спасибо большое, эта статья очень помогла. На её основе сделал свою авторизацию. По моему она единственная в рунете такая.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *