c# - 将 azure keyvault 机密 json 反序列化为 MicrosoftIdentityOptions
问题描述
我在应用程序启动时加载 keyvault 机密,并且配置添加了保管库机密 ,正如我们在此处看到的那样。我正在使用 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"]);
}
})
- 以下 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));
- 在应用程序引导上,以下变量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>();
.......
......
}
任何帮助深表感谢。
谢谢
解决方案
在密钥保管库中创建密钥作为名称-值对。
Azure Key Vault 机密名称仅限于字母数字字符和短划线。分层值(配置部分)使用 --(两个破折号)作为分隔符。冒号通常用于在 ASP.NET Core 配置中从子项中分隔部分,但不允许在密钥保管库机密名称中使用。因此,当秘密加载到应用程序的配置中时,使用两个破折号并用冒号交换。
与其将所有秘密保存在单个 json 中,不如将每个属性添加为单个秘密。
例如,“AzureAd1--TenantId”应该是 AzureAd1 表示部分的键的名称
推荐阅读
- node.js - Node.js 参数类型字符串不可分配给参数类型函数(T)
- syntax - .pick 不支持混音?
- php - 此代码对 SQL 注入和其他类型的攻击是否安全?(如果是为什么?)
- java - 在 JDeveloper 中获取“java.net.SocketException: Permission denied: connect”
- c# - 在 Unity 2018 中同时拖动 2 个游戏对象
- javascript - 传播运算符的打字稿抛出错误
- ios - 自动续订和沙盒模式下的收据
- c# - 在 BizTalk 中将取消批处理的消息合并回单个消息
- javascript - 箭头函数与类方法的内存占用
- python - 我想用 z 矩阵的所有值的平均值填充 z 矩阵中的缺失值