c# - 如何安全地存储和设置 SmtpClient 类使用的密码?

标签 c# tfs passwords smtpclient azure-devops

我正在编写一个需要发送 SMTP 电子邮件的 C# 类。我在这个 SO 问题中找到了代码,它给了我发送电子邮件所需的内容 (SO Question)

为方便起见,这是我从 answer 修改的代码对于上述问题:

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "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);
}

我遇到的问题是,该问题中的代码要求将 smtp 密码存储在纯文本 C# 源文件中。问题一是此代码将被 checkin 团队基础服务,因此整个团队都必须/了解凭据。问题二是混淆是可能的,但它不能解决问题 1。

我发现最接近的解决方案是将应用配置加密作为安装步骤。这并不能解决问题 1,但如果需要可以解决。

生产应用程序中是否会出现这种情况?使用哪些最佳实践来存储实例化 C# 类所需的密码?

最佳答案

我们使用我们的构建服务器 TeamCity 解决了这个问题。构建系统包含生产 secret (密码、API key 等),只能由少数受信任的个人设置。然后,我们的构建系统负责使用脚本和/或密码构建参数在编译之前/之后更改配置(和其他敏感)文件。

这使我们有时间为我们的 secret 提交暂存/测试值,但要知道生产构建将获得生产 secret 。 App/Web.Config 转换可以处理 URL 切换 (dev/qa/stage/prod),因此我们只将构建服务器用于我们不希望包含在源代码管理中的部分。

关于c# - 如何安全地存储和设置 SmtpClient 类使用的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246364/

相关文章:

java - 在使用 Netbeans 生成的代码加载主应用程序之前,如何要求登录身份验证?

java - Redis 服务器和 Elasticsearch 集成

c# - 用于 web api 的类似计时器的功能

c# - 使用 TryParseExact 将 "August 2012"转换为 DateTime 对象

tfs - TFS 中的 "watermark"字段是什么?

TFS Build release IIS Deployment 虚拟路径应该以a/Error开头

postgresql - 多个用户的 .pgpass 文件

javascript - 获取两个不同时区的日期时间

azure - Visual Studio 2013 Azure 发布配置文件相同的 Azure 帐户但不同的开发人员

mysql - 在 mysql 中复制 wordpress 密码哈希