正在将azure keyvault secret json反序列化为MicrosoftIdentityOptions



当应用程序启动并且配置添加了保管库机密时,我加载密钥保管库机密正如我们在这里看到的。我正在使用Microsoft.Identity.Web添加AD SSO,并注册示例中提到的AddSignin((。但是这个秘密并没有像预期的那样被序列化。但是,如果机密保存在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为空

文件-WebAppServiceCollectionExtension.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>();
.......
......
}

非常感谢您的帮助。

谢谢

答案就在这里https://learn.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2.2#绑定数组到类

在密钥库中创建机密作为名称-值对。

Azure密钥库机密名称仅限于字母数字字符和短划线。分层值(配置部分(使用--(两个短划线(作为分隔符。在ASP.NET Core配置中,冒号通常用于从子密钥分隔节,但在密钥保管库机密名称中不允许使用冒号。因此,当机密加载到应用程序的配置中时,会使用两个破折号并将其替换为冒号。

与其将所有机密保存在单个json中,不如将每个属性添加为单个机密。

例如";AzureAd1-TenantId";应该是密钥的名称,其中AzureAd1表示部分

最新更新