【问题标题】:Azure Key Vault returns secret even after disabling setup即使在禁用设置后 Azure Key Vault 也会返回机密
【发布时间】:2019-01-28 20:34:59
【问题描述】:

我正在为一个爱好项目试验 Azure Key Vault。起初,我在本地开发,但现在我的数据库在 Azure 中。所以我希望这个连接字符串在 Key Vault 中是安全的。我设法通过 Visual Studio 中的连接服务选项来完成。连接已建立,一切都按预期工作。 不过,现在我想在开发中使用 appsettings.json 中的配置值访问本地数据库。我认为通过将设置包装在 program.cs 中的 ConfigureAppConfiguration 委托中,如下所示将绕过 Key Vault 并转到本地 appsettings。但是在运行此代码时,我仍然会得到 Key Vault 机密值(并且在调试中代码被跳过(所以 IsDevelopment 为真)

            if (!context.HostingEnvironment.IsDevelopment())
            {
                var builtConfig = config.Build();
                var keyVaultEndpoint = GetKeyVaultEndpoint();
                if (!string.IsNullOrEmpty(keyVaultEndpoint))
                {
                    var azureServiceTokenProvider = new AzureServiceTokenProvider();
                    var keyVaultClient = new KeyVaultClient(
                        new KeyVaultClient.AuthenticationCallback(
                            azureServiceTokenProvider.KeyVaultTokenCallback));
                    config.AddAzureKeyVault(
                        keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
                }
            }

所以我的问题是;

  1. 还有其他人遇到过这种奇怪的行为吗?
  2. 如何正确处理在本地计算机上切换密钥库

【问题讨论】:

  • 你的非开发环境是什么?天蓝色网络应用?
  • 什么是context? program.cs中默认没有变量
  • 非开发环境是 Azure Web 应用。但问题出在开发者身上。
  • 上下文是 WebHostBuilderContext 类型

标签: azure .net-core azure-keyvault


【解决方案1】:

为此,我一般不使用Program类中的Hosting环境,而是使用环境变量。由于 keyvault 可能会更改,因此我将 keyvault 作为环境变量存储在生产环境中。我现在可以将函数定义为:

string GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("KeyVaultURL");

这里的“KeyVaultURL”是存储 URL 端点的环境变量名称。一旦你的函数被这样定义,你可以简单地检查它是否返回 null。如果它返回 null,您可以跳过密钥保管库设置。这样,即使您将网站移动到选择使用其他东西而不是密钥保管库的位置,即使在生产环境中也不会出现问题。

【讨论】:

  • 这不是我的问题。行 context.HostingEnvironment.IsDevelopment() 工作得很好。代码永远不会被执行。仍然从 keyvault 加载值
  • 如果代码仍然被执行,你所说的行运行正常是什么意思?如果它正在工作并且值为 true,则代码不会执行
【解决方案2】:

结果证明它毕竟不是代码和密钥库。在实施 keyvault 之前,我已经对用户机密进行了试验,结果证明这仍然在我的配置提供程序中执行。当我调试时,我查看了 IConfiguration.Providers 的内容,发现我的设置存在于我计算机上的 secrets.json 中。

C:\Users\Username\AppData\Roaming\Microsoft\UserSecrets\e53d8827-fdcb-496d-8290-9ff7fcf0ec04

我希望其他有这个问题的人免于挖掘代码

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 2021-04-25
    • 2020-04-26
    • 1970-01-01
    • 2020-12-19
    • 2019-12-01
    • 2018-07-13
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多