При разработке тиражных решений на мобильной платформе 1С разработчики часто сталкиваются с задачей защиты конфигурации и привязки лицензии к конкретному планшету или смартфону пользователя. Рассмотрим, какие штатные средства предоставляет платформа 1С, как устроена работа со свойствами мобильной операционной системы и какие существуют альтернативные способы лицензирования.
Использование свойства ИдентификаторКлиента объекта СистемнаяИнформация
В платформе 1С для получения уникального идентификатора рабочего места используется объект СистемнаяИнформация. Разберем базовый пример кода на встроенном языке 1С:
СисИнфо = Новый СистемнаяИнформация;
ИдентификаторУстройства = СисИнфо.ИдентификаторКлиента;
Проанализируем, как именно формируется и функционирует ИдентификаторКлиента:
При первом запуске приложения создается случайная строка в формате GUID (уникальный 128-битный идентификатор).
Сформированное значение сохраняется во внутреннем служебном файле настроек информационной базы на устройстве.
При всех последующих вызовах платформа считывает ранее сохраненное значение из файла, обеспечивая постоянство идентификатора в рамках текущей установки.
Ограничения штатного идентификатора клиента
Выясним причину, по которой ИдентификаторКлиента не является полноценным аппаратным слепком устройства. Существуют сценарии, при которых данный идентификатор сбрасывается или копируется:
Переустановка приложения: Если пользователь полностью удаляет приложение и устанавливает его заново, служебный файл настроек удаляется, а при новом старте будет сгенерирован совершенно другой GUID.
Очистка данных приложения: Сброс данных и кэша программы через системные настройки Android или iOS удаляет сохраненный идентификатор.
Прямое копирование информационной базы: Если файлы базы данных перенести на другой смартфон целиком, то ИдентификаторКлиента перенесется вместе с ними без изменений.
Почему нельзя прочитать IMEI или MAC-адрес напрямую
Ранее для защиты программного обеспечения разработчики использовали аппаратные параметры: серийный номер материнской платы, IMEI модуля связи или MAC-адрес сетевой карты. В современных мобильных операционных системах действуют строгие политики безопасности и конфиденциальности:
Ограничения на IMEI и серийные номера: В Android начиная с 10 версии (API 29) и в iOS чтение аппаратных идентификаторов полностью заблокировано для обычных приложений. Разрешение на их чтение выдается исключительно системным утилитам производителя или сотового оператора.
Рандомизация MAC-адреса: Мобильные ОС возвращают поддельный или случайный MAC-адрес при сетевых запросах для защиты приватности пользователя.
Использование внешних компонент (Native API)
Если штатного ИдентификаторКлиента недостаточно и требуется более устойчивая привязка к операционной системе, используют внешние компоненты, написанные с применением Native API (Java/C++ для Android, Objective-C/C++ для iOS). Рассмотрим, к каким параметрам может обращаться внешняя компонента:
ANDROID_ID (для Android): Системный идентификатор Settings.Secure.ANDROID_ID уникален для сочетания устройства, ключа подписи разработчика и профиля пользователя. Он не требует специальных разрешений, сохраняется при обновлениях и очистке кэша, но сбрасывается при полном возврате устройства к заводским настройкам (Factory Reset).
Android Keystore: Внешняя компонента может создать аппаратный криптографический ключ в защищенном чипе безопасности устройства. Этот ключ физически невозможно извлечь или скопировать на другой планшет.
Keychain и identifierForVendor (для iOS): Для устройств Apple компонента может сохранять сгенерированный уникальный токен в системное хранилище Keychain. Данные из связки ключей не удаляются даже после деинсталляции приложения.
Архитектурные подходы к защите мобильных решений
Для надежного контроля лицензий рекомендуется перенести валидацию на центральный сервер. Разберем наиболее эффективные схемы лицензирования:
Конкурентные онлайн-токены: При каждом сеансе обмена через HTTP-сервисы мобильное приложение запрашивает подтверждение сессии. Центральная база 1С контролирует число одновременно активных устройств и может принудительно заблокировать дубликаты.
Использование Мобильного клиента вместо мобильной платформы: Если решение работает в режиме реального времени («Мобильный клиент 1С»), контроль лицензирования полностью возлагается на серверную часть 1С (клиентские лицензии уровня предприятия или СЛК).
Привязка к сервисам Push-уведомлений: Токены регистрации в FCM (Firebase Cloud Messaging) или APNs привязаны к конкретной инсталляции и позволяют однозначно адресовать команды проверки лицензии выбранному устройству.