Десериализация azure секретного ключа json в MicrosoftIdentityOptions - PullRequest
0 голосов
/ 25 марта 2020

Я загружаю секреты keyvault, когда приложение запускается, и в конфигурацию добавляются секреты хранилища , как мы видим здесь . Я использую Microsoft.Identity.Web для добавления единого входа в AD и регистрирую AddSignin (), как указано в примерах. Но секрет не сериализуется, как ожидалось на данный момент . Однако, если секреты хранятся в appsettings. json, он работает нормально. Как я могу сделать эту работу? Требуется явная десериализация?

Ниже приведен полный код настройки

1.Program.cs имеет следующий код.

ConfigureAppConfiguration((hostingCtx, config) =>
        {

            if (hostingCtx.HostingEnvironment.IsProduction())
            {
                var builtConfig = config.Build();
                AzureKeyVaultConfigurationExtensions.AddAzureKeyVault(config, builtConfig["AppConfiguration:KeyVaultUrl"]);
            }
        })
Секрет в следующем формате json хранится в keyvault
{"CallbackPath":"/home/index","ClientId":"######","ClientSecret":"#######","Domain":"######","Instance":"######","TenantId":"######"}

Добавлена ​​ссылка на Microsoft.Identity.Web

Зарегистрирован нижеуказанный сервис в Startup.cs-> ConfigureService

    services.AddAuthentication(sharedOptions =>
                {
                    sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                })
                .AddSignIn("AzureAd1", configuration, options => configuration.Bind("AzureAd1", options));
В приложении bootstrap приведенная ниже переменная microsoftIdentityOptions пусто

Файл - WebAppServiceCollectionExtensions.cs

public static AuthenticationBuilder AddSignIn(
                this AuthenticationBuilder builder,
                string configSectionName,
                IConfiguration configuration,
                string openIdConnectScheme,
                string cookieScheme,
                Action<OpenIdConnectOptions> configureOptions,
                bool subscribeToOpenIdConnectMiddlewareDiagnosticsEvents = false)
            {
                builder.Services.Configure(openIdConnectScheme, configureOptions);
                builder.Services.Configure<MicrosoftIdentityOptions>(options => configuration.Bind(configSectionName, options));

                var microsoftIdentityOptions = configuration.GetSection(configSectionName).Get<MicrosoftIdentityOptions>();
     .......
     ......
    }

Любая помощь глубоко ценится.

Спасибо

1 Ответ

0 голосов
/ 25 марта 2020

Ответ прямо здесь https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2.2#bind -an-array-to-a-class

Создание секретов в хранилище ключей в виде пар имя-значение.

Azure Секретные имена Key Vault ограничены буквенно-цифровыми c символами и тире. Иерархические значения (разделы конфигурации) используют - (две черты) в качестве разделителя. Двоеточия, которые обычно используются для отделения раздела от подраздела в ASP. NET Конфигурация ядра, не допускаются в секретных именах хранилища ключей. Поэтому две черты используются и заменяются двоеточием при загрузке секретов в конфигурацию приложения.

Вместо того, чтобы хранить все секреты внутри одного json, каждое свойство должно быть добавлено как единственный секрет.

Например, для "AzureAd1 - TenantId" должно быть имя ключа, где AzureAd1 обозначает раздел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...