reg*_*ahn 6 .net c# azure azure-keyvault asp.net-core
我正在使用 Azure Key Vault 配置提供程序在应用程序启动时读取一些机密。然而,秘密全天都在轮换,我希望能够在轮换发生时重新加载新值。
我说的类似于reloadOnChangeapi
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", reloadOnChange: true);
})
Run Code Online (Sandbox Code Playgroud)
这可能吗?
这是一个 webapi 项目,因此在实践中,如果更好/更可行,我可以通过手动重新加载每个 HttpRequest 的值来逃避。
小智 14
使用Microsoft.Extensions.Configuration.AzureKeyVault (v3),您可以执行以下操作:
configurationBuilder.AddAzureKeyVault(new AzureKeyVaultConfigurationOptions
{
Vault = configuration["KeyVaultUrl"],
ReloadInterval = TimeSpan.FromMinutes(10),
Client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
new AzureServiceTokenProvider().KeyVaultTokenCallback))
});
Run Code Online (Sandbox Code Playgroud)
现在,当您IConfiguration在服务中请求时,KeyVault 机密将可用并根据您的重新加载间隔进行刷新。
小智 7
与 Bobby Koteski 提议的相同,但使用较新的Azure.Extensions.AspNetCore.Configuration.Secrets包,因为Microsoft.Extensions.Configuration.AzureKeyVault已弃用。
ReloadInterval是两次尝试轮询 Azure Key Vault 是否发生更改之间等待的时间。
configurationBuilder.AddAzureKeyVault(
new SecretClient(
new Uri(configuration["KeyVaultBaseUrl"]),
new ManagedIdentityCredential(configuration["UserAssignedManagedIdentityClientId"])
),
new AzureKeyVaultConfigurationOptions()
{
ReloadInterval = TimeSpan.FromSeconds(1000)
}
);
Run Code Online (Sandbox Code Playgroud)
以及源代码的链接,以查看它的实际工作原理:)
秘密会被缓存,直到IConfigurationRoot.Reload()被调用。在执行重新加载之前,应用程序不会考虑密钥保管库中过期、禁用和更新的机密。
Configuration.Reload();
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,您可以参考这篇文章。
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |