Как привязать лицензию мобильного приложения 1С к конкретному устройству?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Использование свойства ИдентификаторКлиента объекта СистемнаяИнформация

В платформе 1С для получения уникального идентификатора рабочего места используется объект СистемнаяИнформация. Разберем базовый пример кода на встроенном языке 1С:


СисИнфо = Новый СистемнаяИнформация;
ИдентификаторУстройства = СисИнфо.ИдентификаторКлиента;

Проанализируем, как именно формируется и функционирует ИдентификаторКлиента:

  1. При первом запуске приложения создается случайная строка в формате GUID (уникальный 128-битный идентификатор).
  2. Сформированное значение сохраняется во внутреннем служебном файле настроек информационной базы на устройстве.
  3. При всех последующих вызовах платформа считывает ранее сохраненное значение из файла, обеспечивая постоянство идентификатора в рамках текущей установки.

Ограничения штатного идентификатора клиента

Выясним причину, по которой ИдентификаторКлиента не является полноценным аппаратным слепком устройства. Существуют сценарии, при которых данный идентификатор сбрасывается или копируется:

  1. Переустановка приложения: Если пользователь полностью удаляет приложение и устанавливает его заново, служебный файл настроек удаляется, а при новом старте будет сгенерирован совершенно другой GUID.
  2. Очистка данных приложения: Сброс данных и кэша программы через системные настройки Android или iOS удаляет сохраненный идентификатор.
  3. Прямое копирование информационной базы: Если файлы базы данных перенести на другой смартфон целиком, то ИдентификаторКлиента перенесется вместе с ними без изменений.

Почему нельзя прочитать IMEI или MAC-адрес напрямую

Ранее для защиты программного обеспечения разработчики использовали аппаратные параметры: серийный номер материнской платы, IMEI модуля связи или MAC-адрес сетевой карты. В современных мобильных операционных системах действуют строгие политики безопасности и конфиденциальности:

  1. Ограничения на IMEI и серийные номера: В Android начиная с 10 версии (API 29) и в iOS чтение аппаратных идентификаторов полностью заблокировано для обычных приложений. Разрешение на их чтение выдается исключительно системным утилитам производителя или сотового оператора.
  2. Рандомизация MAC-адреса: Мобильные ОС возвращают поддельный или случайный MAC-адрес при сетевых запросах для защиты приватности пользователя.

Использование внешних компонент (Native API)

Если штатного ИдентификаторКлиента недостаточно и требуется более устойчивая привязка к операционной системе, используют внешние компоненты, написанные с применением Native API (Java/C++ для Android, Objective-C/C++ для iOS). Рассмотрим, к каким параметрам может обращаться внешняя компонента:

  1. ANDROID_ID (для Android): Системный идентификатор Settings.Secure.ANDROID_ID уникален для сочетания устройства, ключа подписи разработчика и профиля пользователя. Он не требует специальных разрешений, сохраняется при обновлениях и очистке кэша, но сбрасывается при полном возврате устройства к заводским настройкам (Factory Reset).
  2. Android Keystore: Внешняя компонента может создать аппаратный криптографический ключ в защищенном чипе безопасности устройства. Этот ключ физически невозможно извлечь или скопировать на другой планшет.
  3. Keychain и identifierForVendor (для iOS): Для устройств Apple компонента может сохранять сгенерированный уникальный токен в системное хранилище Keychain. Данные из связки ключей не удаляются даже после деинсталляции приложения.

Архитектурные подходы к защите мобильных решений

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

  1. Конкурентные онлайн-токены: При каждом сеансе обмена через HTTP-сервисы мобильное приложение запрашивает подтверждение сессии. Центральная база 1С контролирует число одновременно активных устройств и может принудительно заблокировать дубликаты.
  2. Использование Мобильного клиента вместо мобильной платформы: Если решение работает в режиме реального времени («Мобильный клиент 1С»), контроль лицензирования полностью возлагается на серверную часть 1С (клиентские лицензии уровня предприятия или СЛК).
  3. Привязка к сервисам Push-уведомлений: Токены регистрации в FCM (Firebase Cloud Messaging) или APNs привязаны к конкретной инсталляции и позволяют однозначно адресовать команды проверки лицензии выбранному устройству.
← На главную