尝试从Asp.net Core中的Azure密钥保管库访问对象值 [英] Trying to access the object value from Azure key vault in Asp.net core

查看:94
本文介绍了尝试从Asp.net Core中的Azure密钥保管库访问对象值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在azure的密钥库密钥中有一个对象值,并尝试在启动类中读取该值,但该值始终为空.

I have an object value in the key vault key of azure and trying to read the value at the startup class but the value is always null.

Program.cs

Program.cs

var azureServiceTokenProvider = new AzureServiceTokenProvider();
                                var keyVaultClient = new KeyVaultClient(
                                    new KeyVaultClient.AuthenticationCallback(
                                        azureServiceTokenProvider.KeyVaultTokenCallback));

                                config.AddAzureKeyVault(
                                    vaultConfig.AzureVaultUrl,
                                    keyVaultClient,
                                    new DefaultKeyVaultSecretManager());

Startup.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

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 值始终为空.

这是我的天蓝色钥匙保险库值

Here is my azure key vault value

密钥秘密值的Json结构

Json structure of key secret value

{
        "OktaDomain": "https://dev-166545.okta.com/oauth2/XXXXXXXXXXXXXXXXX/v1/authorize",
        "ClientId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
        "ClientSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "redirectUrl": "https://localhost:44307"
    }

ViewModel.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"]代码,我可以获取该值,但是我想为此进行依赖项注入.

With this _config["OktaConfig"] code I am able to get the value, but I want to do dependency injection for that.

推荐答案

我站在一边进行了快速测试,这是我用于快速测试的OktaConfig:

I did a quick test on my side, this is my OktaConfig for quick test :

public class OktaConfig
{
    public string RedirectUrl { get; set; }   
}

密钥库中的秘密:

其他代码与您相同.但是在Startup.cs中,我使用下面的代码注入OktaConfig并将其添加到services:

Other code are just same as you. But in Startup.cs , I use the code below to inject OktaConfig and add to services:

services.AddSingleton<OktaConfig>(sp =>
{
    var resultJson = Configuration.GetSection("<your secret name in kv>").Value;
    return JsonConvert.DeserializeObject<OktaConfig>(resultJson);
});

控制器中的代码

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);
}

结果:

希望有帮助.

这篇关于尝试从Asp.net Core中的Azure密钥保管库访问对象值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆