我在应用程序启动并且配置中添加了密钥库秘密时加载密钥库密钥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"]);
}
})
{"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));
文件-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>();
.......
......
}
任何帮助深表感谢。
谢谢
在密钥库中创建秘密作为名称-值对。
Azure Key Vault秘密名称仅限于字母数字字符和破折号。层次结构值(配置节)使用-(两个破折号)作为分隔符。冒号,通常用于在ASP.NET Core配置中从子项中分隔部分,但密钥库机密名称中不允许使用冒号。因此,当机密加载到应用程序的配置中时,将使用两个破折号并将其替换为冒号。
不是将所有秘密都保存在单个json中,而是应将每个属性添加为单个秘密。
例如,“ AzureAd1--TenantId”应为其中AzureAd1表示该部分的键的名称