Как хранить пароли в базе 1С

При решении задач интеграции часто возникает необходимость хранить данные аутентификации к сторонним ресурсам (например, логин/пароль от почты или web-сервисов). Каждый раз запрашивать параметры доступа у пользователя не всегда корректно, а в отдельных случаях невозможно. Так как же тогда лучше хранить пароли в базе 1С?

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

Не следует хранить пароли в реквизитах формы. В этом случае секретные данные передаются на клиент в открытом виде, даже если используется поле ввода в режиме пароля. Конфиденциальные данные следует получать только на стороне сервера непосредственно перед использованием.

В Библиотеке стандартных подсистем для хранения секретной информации используется безопасное хранилище паролей. Физически оно представляет собой регистр сведений:

Регистр сведений "Безопасное хранилище данных"

Пароли хранятся в ресурсе с типом ХранилищеЗначения в сжатом виде.

Безопасное хранилище исключается из всех планов обмена, а доступ к нему возможен только в привилегированном режиме.

Для работы с безопасным хранилищем предусмотрены следующие методы общего модуля ОбщегоНазначения:

  • Процедура ЗаписатьДанныеВБезопасноеХранилище(Владелец, Данные, Ключ = «Пароль»)
  • Функция ПрочитатьДанныеИзБезопасногоХранилища(Владелец, Ключи = «Пароль», ОбщиеДанные = Неопределено)
  • Процедура УдалитьДанныеИзБезопасногоХранилища(Владелец, Ключи = Неопределено)

Назначение методов ясно из их названия, приведу примеры их использования:

// Запись пароля "ПарольSMTP" в привязке к текущему объекту
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP");
УстановитьПривилегированныйРежим(Ложь);

// Чтение значений "Пароль" и "ПарольSMTP", относящихся к текущему объекту
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "Пароль, ПарольSMTP");
УстановитьПривилегированныйРежим(Ложь);

// Удаление всех паролей, сохраненных для текущего объекта
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка);
УстановитьПривилегированныйРежим(Ложь);

Оцените статью