Регистрация и авторизация мобильного приложения через расширение 1С (HTTP-сервис, HTTPS, без Firebase)
Задача
Реализовать регистрацию и авторизацию пользователей мобильного приложения на стороне 1С:
1. Соблюдение требований по персональным данным (152-ФЗ)
При использовании Firebase и аналогичных сервисов:
- персональные данные пользователей хранятся за пределами РФ;
- усложняется юридическое сопровождение проекта;
- возникает зависимость от политики внешнего провайдера.
При авторизации через 1С:
- все данные (email, пароли, токены) хранятся в информационной базе 1С;
- сервер находится под полным контролем компании;
- проще обеспечить соответствие требованиям 152-ФЗ.
2. Единый центр данных и бизнес-логики
1С в большинстве проектов уже является:
- источником данных о клиентах;
- системой учёта и аналитики;
- точкой интеграции с внешними сервисами.
Регистрация через 1С позволяет:
- связать пользователя приложения с существующими справочниками (контрагенты, покупатели);
- применять бизнес-логику 1С при регистрации и авторизации;
- не дублировать данные в сторонних системах.
3. Отказ от внешних зависимостей
Firebase и аналоги:
- могут менять тарифы;
- могут быть недоступны;
- требуют отдельной поддержки и мониторинга.
Собственная авторизация в 1С:
- не зависит от сторонних сервисов;
- работает ровно так, как реализовано в конфигурации;
- полностью управляется разработчиком 1С.
4. Контроль над токенами и сессиями
При реализации через HTTP-сервис 1С:
- можно хранить токены в справочнике или регистре;
- можно инвалидировать токен при смене пароля;
- можно реализовать ограничение по устройствам;
- можно гибко управлять временем жизни токена.
- Это особенно важно для:
- корпоративных приложений;
- B2B-систем;
- внутренних мобильных решений.
5. Реализация через расширение, без изменения типовой конфигурации
Использование расширения даёт следующие преимущества:
- типовая конфигурация остаётся нетронутой;
- обновления 1С проходят без конфликтов;
- решение можно переносить между базами;
- авторизация становится отдельным изолированным модулем.
6. Универсальность: мобильные и web-клиенты
HTTP-сервис в 1С:
- одинаково подходит для Flutter, React, Vue, web-клиентов;
- работает по стандартному JSON over HTTPS;
- легко тестируется через Postman.
Один и тот же сервис может использоваться:
- мобильным приложением;
- web-кабинетом пользователя;
- внешними интеграциями.
7. Практический контроль безопасности
В собственной реализации:
- пароли хэшируются (SHA-256 + salt);
- в БД не хранится открытый пароль;
- можно реализовать лимит попыток;
- можно гибко управлять восстановлением пароля.
Без “чёрного ящика” внешнего сервиса.
Платформа: 1С:Предприятие 8.3.27
Сервер: Windows Server + IIS
Клиент: мобильное приложение (Flutter, JSON)
Архитектура
Мобильное приложение | | HTTPS + JSON v IIS | v HTTP-сервис 1С (расширение) | v Справочник web_МобПользователи
1С выступает сервером регистрации и авторизации.
Метаданные (в расширении)
Справочник web_МобПользователи

Минимальный набор реквизитов:
| Имя | Тип |
|---|---|
| Строка | |
| СольПароля | Строка |
| ХэшПароля | Строка |
| mob_uid | Строка |
| Токен | Строка |
| ДатаРегистрации | Дата |
Для восстановления пароля:
| Имя | Тип |
|---|---|
| ResetCodeSalt | Строка |
| ResetCodeHash | Строка |
| ResetCodeExpires | Дата |
| ResetTries | Число |
Для удаления:
| Имя | Тип |
|---|---|
| Удален | Булево |
| ДатаУдаления | Дата |
HTTP-сервис web_mobile
Реализованные маршруты:
| Метод | URL |
|---|---|
| POST | /v1/auth/register |
| POST | /v1/auth/login |
| GET | /v1/auth/me |
| DELETE | /v1/auth/me |
| POST | /v1/auth/forgot |
| POST | /v1/auth/reset |
Хэширование пароля
Используется схема:
SHA256(password + ":" + salt)
&НаСервере
Функция GenerateSalt() Экспорт
Возврат Строка(Новый УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция PasswordHashSha256(Пароль, Соль) Экспорт
Данные = КодировкаТекста.UTF8.GetBytes(Пароль + ":" + Соль);
Хэш = ХешированиеДанных.SHA256(Данные);
Возврат Base64Значение(Хэш);
КонецФункции
Чтение JSON из запроса
&НаСервере
Функция ReadJsonBody(Запрос, Отказ) Экспорт
Попытка
Тело = Запрос.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Тело);
Возврат ПрочитатьJSON(Чтение, Ложь);
Исключение
Отказ = Истина;
Возврат Неопределено;
КонецПопытки;
КонецФункции
Регистрация пользователя
POST /v1/auth/register
Алгоритм:
-
Читаем JSON
-
Генерируем соль и хэш
-
Создаём элемент справочника
-
Сначала записываем
-
Генерируем токен и сохраняем его
&НаСервере
Функция v1_auth_register(Запрос) Экспорт
Данные = ReadJsonBody(Запрос, Отказ);
Если Отказ Тогда
Возврат JsonResponse(400, Новый Структура("error", "INVALID_JSON"));
КонецЕсли;
Соль = GenerateSalt();
Хэш = PasswordHashSha256(Данные.Password, Соль);
Пользователь = Справочники.web_МобПользователи.СоздатьЭлемент();
Пользователь.Email = НРег(Данные.Email);
Пользователь.СольПароля = Соль;
Пользователь.ХэшПароля = Хэш;
Пользователь.mob_uid = Данные.DeviceID;
Пользователь.ДатаРегистрации = ТекущаяДата();
Пользователь.Записать();
Токен = IssueToken(Пользователь.Ссылка);
Объект = Пользователь.Ссылка.ПолучитьОбъект();
Объект.Токен = Токен;
Объект.Записать();
Возврат JsonResponse(200,
Новый Структура("status,token", "registered", Токен));
КонецФункции
Важно: токен генерируется только после Записать().
Авторизация и получение профиля
Решение: использовать собственный заголовок:
X-Auth-Token: <token>
Получение профиля
GET /v1/auth/me
&НаСервере
Функция v1_auth_me(Запрос) Экспорт
Токен = Запрос.Заголовки.Получить("X-Auth-Token");
Если ПустаяСтрока(Токен) Тогда
Возврат JsonResponse(401, Новый Структура("error", "NO_TOKEN"));
КонецЕсли;
Выборка = Справочники.web_МобПользователи.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Токен = Токен Тогда
Возврат JsonResponse(200,
Новый Структура("email", Выборка.Email));
КонецЕсли;
КонецЦикла;
Возврат JsonResponse(401, Новый Структура("error", "INVALID_TOKEN"));
КонецФункции
Восстановление пароля
/v1/auth/forgot
-
Генерируется 6-значный код
-
В БД хранится только хэш
-
Email не раскрывается
{ "status": "sent" }
/v1/auth/reset
{ "Email": "test@example.com", "Code": "123456", "NewPassword": "newpass123" }
Проверяется срок действия и количество попыток, затем пароль обновляется.
Удаление пользователя
DELETE /v1/auth/me
Объект.Удален = Истина; Объект.ДатаУдаления = ТекущаяДата(); Объект.Токен = ""; Объект.Записать();
Удаление реализовано мягкое.
Итог
В результате получено рабочее решение:
-
регистрация и авторизация целиком в 1С;
-
HTTPS;
-
соответствие требованиям хранения данных;
-
без Firebase и сторонних сервисов;
-
реализовано в виде расширения;
-
подходит для мобильных приложений.
Что можно сделано далее
-
хранение токенов в регистре сведений (мультисессии);
-
TTL токена;
-
SMTP / почтовый сервис;
-
аудит действий пользователей.
Статья основана на реальной практической реализации и отладке, включая проблемы IIS и HTTP-сервисов 1С, возникающие при использовании стандартных заголовков авторизации.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.25.85
Вступайте в нашу телеграмм-группу Инфостарт
