Где и как хранить пароль для SmtpClient?

120
15 января 2020, 23:40

Планирую из программы отправлять Email по определенным событиям. Все настройки храню через App.config

Как быть с паролем? Хранить тут же, зашифровав? Если шифровать с ключом, то ключ где хранить?

Answer 1

Я не знаю простых способов порешать эту проблему.

До тех пор, пока мы работаем в энтерпрайз-приложениях (читай: есть application сервер) мы всегда может договариваться о том, чтобы хранить пароль в app.config ("всё равно доступ на сервер открыт только тем, кому надо") чуть ли не в явном виде.

Ещё лучше, когда есть домен и мы можем использовать возможность не указывать пароль вообще. Т.е. для SQL соединений мы можем указать Integrated Security=True в connection string, для почты мы можем обращаться к корпоративному Exchange Server'у, который знает, что служба запущена от такой-то доменной учётки.

Как только мы уходим в создание приложений, рассчитанных на b2c сегмент, т.е. продаём домашнему пользователю ПО, то вся схема начинает рассыпаться как карточный домик. И вместо почтовика приходится коннектиться к какому-то бесплатному gmail/rambler/mailru/yandex и т.п. сервису, и SQL уже полноценно не подымешь...

Я не знаю, возможно ли вообще общее решение, когда у вас всё для расшифровки находится в одном месте. Вон, даже настройки ODBC винда до сих пор хранит в явном виде в реестре. :(

Единственное что мне приходит в голову: шифровать данные пользователя паролем пользователя (он же нигде не хранится), однако это решение с побочками (забыл пароль - потерял настройки, нельзя зашить пароль в дистрибутив)

Какие-то костыли встречал (например), но с такой кучей побочек (только веб-конфиг, только коннекшн стринг и т.п.), что пользоваться неудобно. На дворе шёл уже 2019 год... :(

READ ALSO
Как узнать скорость и вектор движения указателя мыши?

Как узнать скорость и вектор движения указателя мыши?

Я начинаю изучать C# и хочу попрактиковаться с векторамиЯ сделал WPF приложение, в котором на ПКМ создаются круги, а если нажать и удерживать...

150
Linq left join значение null

Linq left join значение null

Есть SQl запрос(пример), который возвращает нужный мне результат:

140
c# Неадекватно запускается файл

c# Неадекватно запускается файл

Столкнулся со странной проблемой

149
узнать какие есть столбцы в dataGridView?

узнать какие есть столбцы в dataGridView?

Мне нужно узнать какие столбцы есть в dataGridView

108