Имя: Пароль:
1C
1С v8
БезопасноеХранилище в мобильном приложении 1С для хранения пароля
0 Nikifforoff96
 
21.11.19
14:41
Доброго времени суток!

С версии 8.3.15 в мобильной платформе 1С появился МенеджерБезопасногоХранилища и методы для работы с ним. Описание на ИТС (https://its.1c.ru/db/v8316doc#bookmark:dev:TI000002217).

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

Почему интересуюсь? Есть мобильное приложение (на платформе 1С 8.3.15), которое подключается к центральной базе (так же на 1С) через веб-сервис. Для подключения, само собой, нужно передавать пароль в открытом виде, а для этого нужно хранить его в открытом виде.
В моём случае пользователь один раз вводит свой логин/пароль, они сохраняются в константу и в дальнейшем берутся оттуда при каждом запросе к центральной базе.

Как по мне, эта схема небезопасна. Файл базы на мобильном устройстве открыт для других приложений. Вытащить из него пароль не очень сложно. Или же из файла бэкапа мобильной базы.
Сами 1С тоже говорят, что пароли в таком виде хранить нельзя. В БСП есть некий регистр сведений "БезопасноеХранилище" закрытый для всех ролей, который хранит пароли в сжатом хранилище значения. Но это что-то не то.

Насколько безопасно хранить пароль в этом новом Безопасном хранилище через "МенеджерБезопасногоХранилища"? И будут ли другие приложения иметь к нему доступ, если получат ключ значения?

Как работать с ним, я понял (методом тыка):

ПОМЕЩЕНИЕ:

&НаКлиенте
Процедура СохранитьПарольВБезопасноеХранилище(ПарольСтрока)
    
    #Если МобильноеПриложениеКлиент Тогда
        ПоддерживаетсяЗащитаДоступа = БезопасноеХранилище.ПоддерживаетсяЗащитаДоступа(СпособЗащитыДоступаБезопасногоХранилища.Нет);
        Если ПоддерживаетсяЗащитаДоступа Тогда
        ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеПомещенияБХ", ЭтотОбъект);
        КлючПароля = Строка(Новый УникальныйИдентификатор); // здесь можно любую строку передать
        БезопасноеХранилище.НачатьПомещениеДанных(КлючПароля, ПарольСтрока, СпособЗащитыДоступаБезопасногоХранилища.Нет,, ОписаниеОповещения);    
    #КонецЕсли
    
КонецПроцедуры

&НаКлиенте
Процедура ЗавершениеПомещенияБХ(Результат, Ключ, ДополнительныеПараметры) Экспорт

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




ПОЛУЧЕНИЕ:

&НаКлиенте
Процедура ПолучитьПароль(КлючПароля)

ОписаниеОповещенияЗавершения = Новый ОписаниеОповещения("ЗавершениеПолученияЗначения", ЭтотОбъект);
БезопасноеХранилище.НачатьПолучениеДанных(КлючПароля, ОписаниеОповещенияЗавершения);

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

&НаКлиенте
Процедура ЗавершениеПолученияЗначения(Результат, Ключ, Значение, ДополнительныеПараметры) Экспорт

КонецПроцедуры
1 Nikifforoff96
 
22.11.19
12:45
Стоит ли вообще запариваться с этим?
2 1С Ассенизатор ПРОФ
 
22.11.19
12:51
(1) "Насколько безопасно хранить пароль в этом новом Безопасном хранилище через "МенеджерБезопасногоХранилища"? И будут ли другие приложения иметь к нему доступ, если получат ключ значения?". Не будут. Только сама мобильная платформа может взаимодействовать с этим.