Как получить доступ к секретам в ASP.NET Core Program.cs
Я создаю приложение ASP.NET Core версии 1.1, в котором Kestrel должен работать по протоколу HTTPS / SSL. Здесь Program.cs
загрузочный код...
public class Program
{
public static void Main(string[] args)
{
var contentRoot = Directory.GetCurrentDirectory();
var certFilePath = Path.Combine(contentRoot, @"Certificates\Kestrel.pfx");
// TODO Store password in Secrets
var certificate = new X509Certificate2(certFilePath, "kr0GEE6lJ5Ok");
var host = new WebHostBuilder()
.UseKestrel(cfg => cfg.UseHttps(certificate))
.UseContentRoot(contentRoot)
.UseSetting("detailedErrors", "true")
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("https://localhost:5001/")
.CaptureStartupErrors(true)
.Build();
host.Run();
}
}
Это работает, как вы могли ожидать, но я хотел бы удалить строку пароля сертификата из кода.
Я использовал новый (для меня в любом случае) инструмент Secrets Manager Tool в остальной части приложения, но не могу найти способ ссылаться на это на данном этапе в конвейере приложения.
Это возможно? Если нет, на какие еще варианты я могу посмотреть?
Благодарю.
1 ответ
Я не уверен, что вы можете использовать Secrets API. Но вы можете прочитать пароль либо из переменных окружения, либо из файла appsettings.json. Вот пример кода. Я использую код.NET Core 2.0, который похож на.NET Core 1.1.
public class Program
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddEnvironmentVariables()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
BuildWebHost(args).Run();
}
public static IConfigurationRoot Configuration { get; set; }
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseKestrel(options =>
{
var password = Configuration["certPassword"];
options.Listen(System.Net.IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("testCert.pfx", password);
listenOptions.UseConnectionLogging();
});
})
.UseStartup<Startup>()
.Build();
}
Надеюсь, поможет.
Это быстрое решение, основанное на следующей статье, в которой объясняется, как добавить секрет пользователя в консольное приложение.
// secrets.json (you can access to this file in Visual Studio via right click on your project in Solution Explorer => Manage user secrets)
{
"SecretSection": {
"Secret1": "Value1",
"Secret2": "Value2"
}
}
// YourSecretSettings.cs
public class YourSecretSettings
{
public string Secret1 { get; set; }
public string Secret2 { get; set; }
}
// Program.cs
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddEnvironmentVariables()
.AddJsonFile("appsettings.json", optional: false)
.AddUserSecrets<YourSecretSettings>()
.Build();
var secretSettings = config.GetSection("SecretSection").Get<YourSecretSettings>();
// Do Something with your secret settings ...
CreateWebHostBuilder(args)
.Build()
.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
И вуаля:)