c# tfs passwords smtpclient vsts

c# - ¿Cómo puedo almacenar y configurar de forma segura la contraseña para usarla en la clase SmtpClient?



tfs passwords (2)

Resolvemos este problema usando nuestro servidor de compilación, TeamCity. El sistema de compilación contiene secretos de producción (contraseñas, claves de API, etc.), que solo pueden ser configurados por unos pocos individuos de confianza. Nuestro sistema de compilación es responsable de alterar los archivos de configuración (y otros archivos confidenciales) justo antes / después de la compilación utilizando scripts y / o parámetros de compilación de contraseñas.

Esto nos libera para comprometer los valores de puesta en escena / prueba de nuestros secretos, pero sabemos que las versiones de producción obtendrán secretos de producción. Las transformaciones App / Web.Config pueden ocuparse de la conmutación de URL (dev / qa / stage / prod), por lo que solo utilizamos el servidor de compilación para las partes que no queremos incluir en el control de código fuente.

Estoy escribiendo una clase C # que necesita enviar correos electrónicos SMTP. Encontré código en esta pregunta SO que me dio lo que necesitaba para enviar el correo electrónico (Pregunta AS)

Para mayor comodidad, aquí está el código que estoy modificando de una respuesta a la pregunta anterior:

using System.Net; using System.Net.Mail; var fromAddress = new MailAddress("[email protected]", "From Name"); var toAddress = new MailAddress("[email protected]", "To Name"); const string fromPassword = "fromPassword"; const string subject = "Subject"; const string body = "Body"; var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); }

El problema que tengo es que el código en esa pregunta requiere que la contraseña de smtp se almacene en el archivo fuente de C # sin formato. El primer problema es que este código se registrará en el servicio de la base del equipo para que todo el equipo tenga que conocer las credenciales. El problema dos es que la ofuscación es posible, pero no soluciona el problema 1.

Lo más parecido a una solución que he encontrado es el cifrado de una configuración de aplicación como un paso de instalación. Esto no evita el problema 1, pero si es necesario se puede hacer.

¿Se presenta esta situación en las aplicaciones de producción y qué mejores prácticas se utilizan para almacenar las contraseñas necesarias para instanciar las clases de C #?


Solo acepta texto simple, es decir

Credentials = new NetworkCredential(fromAddress.Address, "MY Password" )

Cuando implemente el proyecto, nadie podrá ver su contraseña. Si lo guarda en un archivo de texto, puede usar un método de encriptación para evitar que otros vean su contraseña, pero si lo analiza como un parámetro para las Credenciales, entonces debe analizarlo como texto sin formato. Es la forma habitual en que profesionalmente hacemos. Si no está dispuesto a dar su contraseña de correo, cree otra cuenta de correo electrónico para probar y coloque sus credenciales allí.