Хранилище ключей Azure возвращает секрет даже после отключения настройки - PullRequest
0 голосов
/ 28 января 2019

Я экспериментирую с хранилищем ключей Azure для хобби-проекта.Сначала я разрабатывал локально, но теперь моя база данных находится в Azure.Поэтому я хочу, чтобы эта строка подключения была надежной в хранилище ключей.Мне удалось сделать вариант подключенного сервиса в visual studio.Соединение установлено, и все работает как положено.Тем не менее, теперь я хочу, чтобы в процессе разработки доступ к локальной базе данных со значением config из appsettings.json.Я подумал, что оборачивая настройки в делегат ConfigureAppConfiguration в program.cs, как показано ниже, можно обойти Key Vault и перейти к локальным настройкам приложений.Но при запуске этого кода я все равно получаю секретное значение Key Vault (и при отладке код пропускается (поэтому IsDevelopment имеет значение true)

            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. Как правильно справиться с отключением хранилища ключей на локальной машине

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Ну, оказывается, это был не код и ключ-хранилище в конце концов.До реализации keyvault я экспериментировал с пользовательскими секретами, и оказалось, что это все еще выполнялось в моих провайдерах конфигурации.При отладке я посмотрел содержимое IConfiguration.Providers и обнаружил, что мои настройки присутствуют в secrets.json, который находится здесь, на моем компьютере.

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

Я надеюсь, что кто-то еще с этой проблемой спасен от копания в код

0 голосов
/ 29 января 2019

Для этого вместо доступа к среде хостинга в классе Program я обычно использую переменные среды.Поскольку keyvault может измениться, я храню keyvault как переменную среды в производственной среде.Теперь я могу определить функцию как:

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

Здесь «KeyVaultURL» - это имя переменной среды, в которой хранится конечная точка URL-адреса.Как только ваша функция определена следующим образом, вы можете просто проверить, возвращает ли она значение null.Если он возвращает ноль, вы можете пропустить настройку хранилища ключей.Таким образом, даже если вы переместите свой веб-сайт в место, где вы решите использовать что-то другое вместо хранилища ключей, проблем не будет даже в производственной среде.

...