我已经开发了一些应用程序,并且正在使用外部服务来发送电子邮件(SendGrid)。要使用此服务,我需要登录名和密码才能使用SendGrid api。在developermnet环境中,我使用了.Net Core机密(https://docs.microsoft.com/pl-pl/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows),但是现在发布后,我需要以其他方式传递登录名和密码。我知道有一个Azure Key Vault,但是如果将应用发布到其他地方怎么办?
答案 0 :(得分:0)
用于生产::对Azure资源使用托管身份以避免存储连接字符串。这是一种用于管理Key Vault中机密信息的干净解决方案。
从不共享Key Vault或其他类似资源的访问密钥,甚至不共享给Services或DevOps Engineer在生产中部署或运行应用程序
Program.cs
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
using Microsoft.Extensions.Configuration.AzureKeyVault;
...
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
if (context.HostingEnvironment.IsProduction())
{
var builtConfig = config.Build();
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
$"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
keyVaultClient,
new DefaultKeyVaultSecretManager());
}
})
.UseStartup<Startup>();
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
}
用于开发::您可以选择使用 Dotnet-user-secrets 工具在本地计算机中存储/管理机密。