如何不从用户密码配置获取空值?

时间:2019-04-09 19:39:47

标签: azure asp.net-core azure-keyvault

我想将用户密码用于KeyVault clientid等。设置KeyVault时,我从program.cs调用配置。当我在appsettings.json中添加值时,一切正常,但是如果我删除它并管理用户机密,则在运行program.cs时,它始终为null。

在创建的secret.json中我具有正确的值,并且带有GUID的属性也在我的项目文件中

我还尝试向secret.json添加键和值,并尝试从控制器获取键和值,并且它也是null。

因此,我的WebHost.CreateDefaultBuilder中的program.se似乎没有加载我的secret.json文件。

如果我将AssUserSecrets添加到WebHost.CreateDefaultBuilder(args)中的progam.cs中,就不会有相同的问题。

我正在使用WebHost.CreateDefaultBuilder,因此默认情况下应在asp .net core 2.2中使用它

dontnet user-secret list 

还将显示我的secret.json文件中对我来说的值,因此该值在那里,用户秘密已被初始化。

dontnet user-secret init

另外,说它已经设置好了。

但是在调用我的secret.json属性时仍然只是null

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureServices(services => services.AddAutofac())
                .ConfigureAppConfiguration((context, builder) =>
                {
                    var config = builder.Build();
                    var vault = config["KeyVault:Vault"];
                    builder.AddAzureKeyVault($"https://{config["KeyVault:Vault"]}.vault.azure.net/", config["KeyVault:ClientId"], config["KeyVault:ClientSecret"]);

                });

3 个答案:

答案 0 :(得分:1)

我在自己的网站上进行了测试,并且工作正常,这是您可以参考的步骤。

1。右键单击该项目,然后选择Manage User Secrets。它将在Visual Studio中打开secrets.json文件,您可以在其中添加密钥并将其添加到.csproj文件中。

enter image description here

2。将您希望添加的内容添加到“用户密钥”中。它包括两种写入json对象和简单键/值对的方式。 enter image description here

3。将用户机密映射到模型。

 public class KeyVault
 {
     public string Vault { get; set; }
     public string ClientId { get; set; }
     public string ClientSecret { get; set; }
 }

4。添加配置。 安装软件包Microsoft.VisualStudio.Web.CodeGeneration.DesignMicrosoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.UserSecrets

5。绑定值。这是在Startup.cs文件中完成的。 enter image description here

6。使用映射的机密

public class HomeController : Controller
{
    private readonly KeyVault _keyvault;
    // I’ve injected twilioAccountDetails into the constructor

    public HomeController(IOptions<KeyVault> keyvault)
    {
        // We want to know if twilioAccountDetails is null so we throw an exception if it is           
        _keyvault = keyvault.Value ?? throw new ArgumentException(nameof(keyvault));
    }
........
}

7。在Program.cs中调用它。 enter image description here

有关如何使用User Secrets in a .NET Core Web App的更多详细信息,可以参考此article

答案 1 :(得分:0)

它似乎与:Microsoft.Extensions.Configuration.AzureKeyVault

有关

因为我立即添加了该nuget,它立即停止工作。

更新:更多信息。似乎最新的Microsoft.Extensions.Configuration.AzureKeyVault为我降级了一些配置库。然后它停止工作。

答案 2 :(得分:0)

我在使用 Host.CreateDefaultBuilder() 时遇到了同样的问题,并发现这是因为我的主机环境不是 Development

为了解决这个问题,我在 launchSettings.json 中添加了以下部分:

"environmentVariables": {
    "DOTNET_ENVIRONMENT": "Development"
}

related documentation

<块引用>

以下默认值应用于返回的 HostBuilder:

  • 当 EnvironmentName 为“Development”时,从 User Secrets 加载应用 IConfiguration 使用入口程序集