读取电子邮件设置的 AzureKeyVault 机密值
Read AzureKeyVault secret value for email setting
我有电子邮件设置的模型
public class EmailSettingsModel {
public string MailServer { get; set; }
public int MailPort { get; set; }
public string SenderName { get; set; }
public string Sender { get; set; }
public string Password { get; set; }
}
我将秘密值放入 Azure Key vault
MailServer:smtp.gmail.com; MailPort:587; SenderName:SenderName;
Sender:the.sender@gmail.com; Password:123!2019#
在Startup.cs
文件中,我把我的代码,用运行时间注册了:
public Startup(IConfiguration configuration) {
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services) {
//this appSetting can return value from Azure Key Vault, the secret key.
var appSetting = Configuration.GetValue<string>("AzureKeyVaultEmail");
services.Configure<EmailSettingsModel>(Configuration.GetSection("AzureKeyVaultEmail"));
services.AddSingleton<IEmailSender, EmailSender>();
services.AddOptions();
services.AddMvc();
}
注射 class
public class EmailSender : IEmailSender
{
private readonly EmailSettingsModel _emailSettings;
public EmailSender (IOptions<EmailSettingsModel> emailSettings) {
_emailSettings = emailSettings.Value;
}
}
但是 _emailSettings
总是 null
。对于“_emailSettings”,它假设 return 值
MailServer = smtp.gmail.com
MailPort = 587
SenderName = SenderName
Sender = the.sender@gmail.com
Password = 123!2019#
为什么 _emailSettings
总是 return null
?我想念什么吗?
我尝试使用 作为参考
从问题中提到的代码来看,没有解释您是否为 Azure 密钥保管库编写了有效配置,这将是如下标准的配置,希望您已经添加了。
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
vaultConfig.AzureVaultUrl,
keyVaultClient,
new DefaultKeyVaultSecretManager());
此外,为了从密钥库中读取复杂对象,我建议您编写如下内容:
services.AddSingleton<EmailSettingsModel >(sp =>
{
var resultJson = Configuration.GetSection("AzureKeyVaultEmail").Value;
return JsonConvert.DeserializeObject<EmailSettingsModel>(resultJson);
});
此外,正如我在问题中看到的,下面的字符串看起来不像一个有效的 json 格式:
MailServer:smtp.gmail.com; MailPort:587; SenderName:SenderName; Sender:the.sender@gmail.com;
请以有效格式更改它,它应该可以工作。
希望对您有所帮助。
在 Startup.cs 中,我使用下面的代码注入 EmailSettingsModel
并添加到服务中:
services.AddSingleton<EmailSettingsModel>(sp =>
{
var resultJson = Configuration.GetSection("<your secret name in kv>").Value;
return JsonConvert.DeserializeObject<EmailSettingsModel>(resultJson);
});
在 HomeController 中:
public class HomeController : Controller
{
private readonly EmailSettingsModel emailSender;
public HomeController(EmailSettingsModel _emailSender)
{
emailSender = _emailSender;
}
public IActionResult Index()
{
var a = emailSender.MailServer ;
return View();
}
}
您将获得密钥保管库值。你可以参考这个 .
我有电子邮件设置的模型
public class EmailSettingsModel {
public string MailServer { get; set; }
public int MailPort { get; set; }
public string SenderName { get; set; }
public string Sender { get; set; }
public string Password { get; set; }
}
我将秘密值放入 Azure Key vault
MailServer:smtp.gmail.com; MailPort:587; SenderName:SenderName; Sender:the.sender@gmail.com; Password:123!2019#
在Startup.cs
文件中,我把我的代码,用运行时间注册了:
public Startup(IConfiguration configuration) {
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services) {
//this appSetting can return value from Azure Key Vault, the secret key.
var appSetting = Configuration.GetValue<string>("AzureKeyVaultEmail");
services.Configure<EmailSettingsModel>(Configuration.GetSection("AzureKeyVaultEmail"));
services.AddSingleton<IEmailSender, EmailSender>();
services.AddOptions();
services.AddMvc();
}
注射 class
public class EmailSender : IEmailSender
{
private readonly EmailSettingsModel _emailSettings;
public EmailSender (IOptions<EmailSettingsModel> emailSettings) {
_emailSettings = emailSettings.Value;
}
}
但是 _emailSettings
总是 null
。对于“_emailSettings”,它假设 return 值
MailServer = smtp.gmail.com
MailPort = 587
SenderName = SenderName
Sender = the.sender@gmail.com
Password = 123!2019#
为什么 _emailSettings
总是 return null
?我想念什么吗?
我尝试使用
从问题中提到的代码来看,没有解释您是否为 Azure 密钥保管库编写了有效配置,这将是如下标准的配置,希望您已经添加了。
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
vaultConfig.AzureVaultUrl,
keyVaultClient,
new DefaultKeyVaultSecretManager());
此外,为了从密钥库中读取复杂对象,我建议您编写如下内容:
services.AddSingleton<EmailSettingsModel >(sp =>
{
var resultJson = Configuration.GetSection("AzureKeyVaultEmail").Value;
return JsonConvert.DeserializeObject<EmailSettingsModel>(resultJson);
});
此外,正如我在问题中看到的,下面的字符串看起来不像一个有效的 json 格式:
MailServer:smtp.gmail.com; MailPort:587; SenderName:SenderName; Sender:the.sender@gmail.com;
请以有效格式更改它,它应该可以工作。
希望对您有所帮助。
在 Startup.cs 中,我使用下面的代码注入 EmailSettingsModel
并添加到服务中:
services.AddSingleton<EmailSettingsModel>(sp =>
{
var resultJson = Configuration.GetSection("<your secret name in kv>").Value;
return JsonConvert.DeserializeObject<EmailSettingsModel>(resultJson);
});
在 HomeController 中:
public class HomeController : Controller
{
private readonly EmailSettingsModel emailSender;
public HomeController(EmailSettingsModel _emailSender)
{
emailSender = _emailSender;
}
public IActionResult Index()
{
var a = emailSender.MailServer ;
return View();
}
}
您将获得密钥保管库值。你可以参考这个