![](/img/trans.png)
[英]Dependency Injection not working with RabitMQ Service Bus with Azure Key Vault Value asp.net core 3.0
[英]Trying to access the object value from Azure key vault in Asp.net core
我在 azure 的密钥库密钥中有一个 object 值,并尝试在启动 class 时读取该值,但该值始终为 Z3079A62586CC0C19。
程序.cs
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
vaultConfig.AzureVaultUrl,
keyVaultClient,
new DefaultKeyVaultSecretManager());
启动.cs
public virtual void ConfigureSettings(IServiceCollection services)
{
services.AddOptions();
services.Configure<OktaConfig>(Configuration.GetSection("OktaConfig")); // Read the value from Azure Key Vault or %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json for Dev Environment
}
Controller.cs
public class SystemController
{
private readonly IConfiguration _config;
private readonly OktaConfig _oktaConfig;
public SystemController(IConfiguration config, IOptions<OktaConfig> oktaConfig)
{
_config = config;
_oktaConfig = oktaConfig.Value; // This value is null
}
[HttpGet("Vaults")]
public IActionResult GetVaultValues()
{
var OktaConfig = JsonConvert.DeserializeObject<OktaConfig>(_config["OktaConfig"]);
return Ok(OktaConfig);
}
_oktaConfig值始终为 null。
这是我的 azure 密钥库值
Json 结构的密钥秘密值
{
"OktaDomain": "https://dev-166545.okta.com/oauth2/XXXXXXXXXXXXXXXXX/v1/authorize",
"ClientId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"ClientSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"redirectUrl": "https://localhost:44307"
}
视图模型.cs
public class OktaConfig
{
public string RedirectUrl { get; set; }
public string OktaDomain { get; set; }
public string ClientId { get; set; }
public string ClientSecret { get; set; }
public string ClientName { get; set; }
}
使用此 _config["OktaConfig"] 代码,我可以获得该值,但我想为此进行依赖注入。
我做了一个快速测试,这是我的OktaConfig
用于快速测试:
public class OktaConfig
{
public string RedirectUrl { get; set; }
}
密钥库中的秘密:
其他代码和你一样。 但是在Startup.cs
中,我使用下面的代码注入 OktaConfig 并添加到services
:
services.AddSingleton<OktaConfig>(sp =>
{
var resultJson = Configuration.GetSection("<your secret name in kv>").Value;
return JsonConvert.DeserializeObject<OktaConfig>(resultJson);
});
controller 中的代码:
private readonly ILogger<HomeController> _logger;
private OktaConfig oktaConfig;
public HomeController(ILogger<HomeController> logger , OktaConfig oktaConfig)
{
this.oktaConfig = oktaConfig;
_logger = logger;
}
public IActionResult Index()
{
return Ok(oktaConfig.RedirectUrl);
}
结果:
希望能帮助到你。
您希望将 KeyVault 中的键/值 map 转换为嵌套配置,这是不可能的。 默认情况下,所有机密都写入根配置。 但是,netcore 中的IConfiguration
实现具有如何实现这一点的功能。 例如,当您设置键“Section1:Key1”时,会设置“Section1”键“Key1”。
Configuration["Section1:Key1"]="value"
var section1 = Configuration.GetSection("Section1");
现在您只需要以这种格式将配置从 KeyVault 写入 Configuration object。 DefaultKeyVaultSecretManager
class 可以为您进行此转换,只需将密钥以适当的格式保存在 KeyVault 中。 只需写分隔符 '--' 而不是 ':' 在我的示例中,您将使用 'Section1--Key1'。
这篇文章是关于这个主题的非常好的信息来源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.