BackEnd на 1с8. Регистрация и авторизация мобильного или web приложения через расширение 1С (HTTP-сервис, HTTPS, без Firebase)

20.01.26

Администрирование - Информационная безопасность

Зачем нужна регистрация и авторизация мобильного или web-приложения через расширение 1С (HTTP-сервис, HTTPS, без Firebase) При разработке мобильных и web-приложений под 1С почти всегда встаёт вопрос: где и как хранить пользователей, пароли и сессии. Использование внешних сервисов авторизации (Firebase, Auth0 и др.) кажется удобным, но на практике часто оказывается проблемным. Реализация регистрации и авторизации непосредственно через 1С, в виде расширения и HTTP-сервиса, решает сразу несколько ключевых задач.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
BackEnd на 1с8. Регистрация и авторизация мобильного или web приложения через расширение 1С (HTTP-сервис, HTTPS, без Firebase):
.cfe 20,17Kb
0 6 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Регистрация и авторизация мобильного приложения через расширение 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_МобПользователи

 

 

Минимальный набор реквизитов:

 

Имя Тип
Email Строка
СольПароля Строка
ХэшПароля Строка
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

Алгоритм:

  1. Читаем JSON

  2. Генерируем соль и хэш

  3. Создаём элемент справочника

  4. Сначала записываем

  5. Генерируем токен и сохраняем его

&НаСервере
Функция 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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

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

17568 руб.

20.12.2024    5319    23    4    

25

WEB-интеграция Загрузка и выгрузка в Excel Программист Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Расширение освободит вас от необходимости вручную обновлять товары в группах ВКонтакте. Достаточно задать правила один раз, и система автоматически синхронизирует ваш каталог. Вы сможете легко выбирать, какие товары публиковать, создавая гибкие критерии отбора. Например, можно добавить важные для покупателей параметры: цвет, размер или другие характеристики.

12200 руб.

29.08.2025    1670    4    0    

5

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

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

60000 руб.

07.05.2019    41351    75    45    

31

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    21871    63    52    

40

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    23254    33    24    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ileshapro100 22.01.26 22:04 Сейчас в теме
Добрый день! Статья как ознакомительная, на мой взгляд. Простите за мое мнение, хочу высказать
1)Зачем в 1с вы пишите процедуры и функции на английском? - в 1с стараются все на нативном языке писать, все что уходит за 1с то там не английском
2) Объект = Пользователь.Ссылка.ПолучитьОбъект();
Объект.Токен = Токен;
Объект.Записать();
У вас вроде как есть уже элемент справочника выше, зачем вы его заново получаете. Можно к нему и обратиться и заново записать.
3)Выборка = Справочники.web_МобПользователи.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Токен = Токен Тогда
Возврат JsonResponse(200,
Новый Структура("email", Выборка.Email));
КонецЕсли;
КонецЦикла;
Почему не задать сразу точный запрос к базе, вы тут получаете список ссылок, а потом в цикле по каждой ссылке делает под запрос , чтобы сравнить с токеном. Если справочников много, то это нагрузка на субд
Для отправки сообщения требуется регистрация/авторизация