将天蓝色的密钥库秘密json反序列化为MicrosoftIdentityOptions

问题描述 投票:0回答:1

我在应用程序启动并且配置中添加了密钥库秘密时加载密钥库密钥as we can see here。我正在使用Microsoft.Identity.Web添加AD SSO并注册示例中提到的AddSignin()。但是秘密并没有像预期的那样被序列化at this point。但是,如果机密信息保存在appsettings.json中,则可以正常工作。我该如何工作?需要显式的反序列化吗?

请在下面找到整个代码设置

1.Program.cs具有下面的代码。

ConfigureAppConfiguration((hostingCtx, config) =>
        {

            if (hostingCtx.HostingEnvironment.IsProduction())
            {
                var builtConfig = config.Build();
                AzureKeyVaultConfigurationExtensions.AddAzureKeyVault(config, builtConfig["AppConfiguration:KeyVaultUrl"]);
            }
        })
  1. 以下json格式的秘密存储在keyvault中
{"CallbackPath":"/home/index","ClientId":"######","ClientSecret":"#######","Domain":"######","Instance":"######","TenantId":"######"}
  1. 添加了对Microsoft.Identity.Web的引用

  2. 在Startup.cs-> ConfigureService中注册了以下服务

    services.AddAuthentication(sharedOptions =>
                {
                    sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                })
                .AddSignIn("AzureAd1", configuration, options => configuration.Bind("AzureAd1", options));
  1. 在应用程序引导中,以下变量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>();
     .......
     ......
    }

任何帮助深表感谢。

谢谢

c# single-sign-on azure-keyvault msal microsoft-identity-platform
1个回答
0
投票

答案就在这里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秘密名称仅限于字母数字字符和破折号。层次结构值(配置节)使用-(两个破折号)作为分隔符。冒号,通常用于在ASP.NET Core配置中从子项中分隔部分,但密钥库机密名称中不允许使用冒号。因此,当机密加载到应用程序的配置中时,将使用两个破折号并将其替换为冒号。

不是将所有秘密都保存在单个json中,而是应将每个属性添加为单个秘密。

例如,“ AzureAd1--TenantId”应为其中AzureAd1表示该部分的键的名称

© www.soinside.com 2019 - 2024. All rights reserved.