Как выглядит атрибут connectionString в AzureKeyVault ConfigurationBuilder? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать новый AzureKeyVault ConfigurationBuilder в приложении .NET 4.7.1 MVC и продолжаю получать ошибки конфигурации при локальном его запуске:

Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. 

Parser Error Message: An error occurred loading a configuration file: One or more errors occurred.

Source Error: 


Line 13:     </builders>
Line 14:   </configBuilders>
Line 15:   <appSettings configBuilders="AzureKeyVault">
Line 16:     <add key="webpages:Version" value="3.0.0.0" />
Line 17:     <add key="webpages:Enabled" value="false" />

После создания нового веб-проекта ASP.NET MVC .NET Framework 4.7.1 я добавил подключенную службу в хранилище ключей Azure и нацелился на существующее хранилище. Мой web.config затем выглядел включенным в этот раздел:

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
      <add name="AzureKeyVault" vaultName="my-test-keyvault" connectionString="" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=1.0.0.0, Culture=neutral" vaultUri="https://WebApplication1-12-kv.vault.azure.net" />
    </builders>
  </configBuilders>
  <appSettings configBuilders="AzureKeyVault">
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.7.1" />
    <httpRuntime targetFramework="4.7.1" />

Я искал в интернете, пытаясь найти примеры того, как должна выглядеть строка соединения, но у меня не было никакого успеха. В документации говорится:

Требуется vaultName. Другие атрибуты позволяют вам вручную управлять тем, к какому хранилищу подключаться, но они необходимы только в том случае, если приложение не работает в среде, которая волшебным образом работает с Microsoft.Azure.Services.AppAuthentication. Библиотека аутентификации служб Azure используется для автоматического получения информации о соединении из среды выполнения, если это возможно, но вы можете переопределить эту функцию, указав вместо нее строку соединения.

Любые рекомендации или указатели здесь? Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Документация, ссылка на которую приведена в связанной статье ( Объявление .NET 4.7.1 Инструменты для облака ), устарела.В классе AzureKeyVaultConfigBuilder отсутствуют свойства clientId и clientSecret .

Однако существует свойство connectionString .Подробные сведения о том, как создать эту строку подключения при локальном запуске, приведены в этой статье: Проверка подлинности между службами в хранилище ключей Azure с использованием .NET .

Этот метод работал для меня.:

RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret}

Все три из этих значений (AppId, TenantId и AppKey) доступны в записи AD приложения в Azure.

0 голосов
/ 20 ноября 2018

Я могу воспроизвести вашу проблему локально с помощью следующего кода:

<add name="AzureKeyVault"
     mode="Strict"
     vaultName="MyVaultName"
     type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure" />

Если ваше приложение работает в службе Azure, которая имеет, это все, что вам нужно, чтобы прочитать конфигурацию из хранилища и добавить ее в свое приложение. И наоборот, если вы не работаете в службе с MSI, вы все равно можете использовать хранилище, добавив следующие атрибуты:

clientId - ключ приложения Azure Active Directory, который имеет доступ к вашему хранилищу ключей.

clientSecret - секрет приложения Azure Active Directory, соответствующий clientId

Я тестирую со следующим кодом, и он работает хорошо, вы можете обратиться к нему.

<configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
      <add name="KeyVault" mode="Strict" prefix="conn_" stripPrefix="true" 
       clientId="MyId" clientSecret="mySecret" vaultName="MyVault"
       type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure" />
    </builders>
  </configBuilders>

Для получения более подробной информации вы можете обратиться к этой статье .

...