При решении задач интеграции часто возникает необходимость хранить данные аутентификации к сторонним ресурсам (например, логин/пароль от почты или web-сервисов). Каждый раз запрашивать параметры доступа у пользователя не всегда корректно, а в отдельных случаях невозможно. Так как же тогда лучше хранить пароли в базе 1С?
Не следует хранить конфиденциальную информацию в реквизитах объектов метаданных, с которыми ведется повседневная работа. Для хранения секретной информации лучше использовать отдельный объект метаданных с ограниченным доступом.
Не следует хранить пароли в реквизитах формы. В этом случае секретные данные передаются на клиент в открытом виде, даже если используется поле ввода в режиме пароля. Конфиденциальные данные следует получать только на стороне сервера непосредственно перед использованием.
В Библиотеке стандартных подсистем для хранения секретной информации используется безопасное хранилище паролей. Физически оно представляет собой регистр сведений:
Пароли хранятся в ресурсе с типом ХранилищеЗначения в сжатом виде.
Безопасное хранилище исключается из всех планов обмена, а доступ к нему возможен только в привилегированном режиме.
Для работы с безопасным хранилищем предусмотрены следующие методы общего модуля ОбщегоНазначения:
- Процедура ЗаписатьДанныеВБезопасноеХранилище(Владелец, Данные, Ключ = «Пароль»)
- Функция ПрочитатьДанныеИзБезопасногоХранилища(Владелец, Ключи = «Пароль», ОбщиеДанные = Неопределено)
- Процедура УдалитьДанныеИзБезопасногоХранилища(Владелец, Ключи = Неопределено)
Назначение методов ясно из их названия, приведу примеры их использования:
// Запись пароля "ПарольSMTP" в привязке к текущему объекту УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP"); УстановитьПривилегированныйРежим(Ложь); // Чтение значений "Пароль" и "ПарольSMTP", относящихся к текущему объекту УстановитьПривилегированныйРежим(Истина); Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "Пароль, ПарольSMTP"); УстановитьПривилегированныйРежим(Ложь); // Удаление всех паролей, сохраненных для текущего объекта УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка); УстановитьПривилегированныйРежим(Ложь);
Остались вопросы?
Спросите в комментариях к статье.
Смотри также:
Подсистема «Адресный классификатор»
Добавление документа в отчет «Связанные документы»
Библиотека стандартных подсистем
Разумно, что в БСП предусмотрели механизмы работы с секретными данными. Не понятно, почему на уровне платформы нет подобных механизмов.