如何访问 ASP.NET Core Program.cs 中的秘密
How to access secrets in ASP.NET Core Program.cs
我正在构建我想要的 ASP.NET 核心版本 1.1 应用程序 Kestrel 到 运行 超过 HTTPS/SSL。这是 Program.cs
bootstrap 代码...
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,但在应用程序管道的这个阶段我找不到引用它的方法。
这可能吗?如果没有,我还可以考虑其他哪些选择?
谢谢。
我不确定你是否可以使用秘密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();
}
希望对您有所帮助。
这是一个基于 the following article 的快速解决方案,他解释了如何在控制台应用程序中添加用户密码。
// 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>();
}
Et Voilà :)
我正在构建我想要的 ASP.NET 核心版本 1.1 应用程序 Kestrel 到 运行 超过 HTTPS/SSL。这是 Program.cs
bootstrap 代码...
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,但在应用程序管道的这个阶段我找不到引用它的方法。
这可能吗?如果没有,我还可以考虑其他哪些选择?
谢谢。
我不确定你是否可以使用秘密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();
}
希望对您有所帮助。
这是一个基于 the following article 的快速解决方案,他解释了如何在控制台应用程序中添加用户密码。
// 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>();
}
Et Voilà :)