PCF .Net Core:.Net Core中访问系统提供的服务变量

问题描述

我有一个.Net核心应用程序,其中包含诸如clientid和secret之类的秘密信息。为此,我正在使用Credhub服务borker。我将.Net核心应用程序推送到PCF并将其与Credhub服务绑定。还在credhub服务实例中创建了这些凭据。之后,我的应用服务环境变量如下所示。

{
 "VCAP_SERVICES": {
  "credhub": [
   {
    "binding_name": "dolemonitorcredhub","credentials": {
     "credhub-ref": "/credhub-service-broker/credhub/851a28ce-279a-428a-a034-5bda144bd9aa/credentials"
    },"instance_name": "credhubskt","label": "credhub","name": "dolemonitorcredhub","plan": "default","provider": null,"syslog_drain_url": null,"tags": [
     "credhub"
    ],"volume_mounts": []
   }
  ]
 }
}

因此,在运行时,凭据部分credhub-ref部分应替换为clientid,clientsecret。我正在尝试在我的代码中访问此env变量。下面是我到目前为止尝试过的代码,但更多用于访问用户定义的变量而不是系统定义的变量。

public class Startup
    {

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.ConfigureCloudFoundryOptions(Configuration);
            services.Configure<CloudFoundryApplicationoptions>(Configuration);
            services.Configure<CloudFoundryServicesOptions>(Configuration);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }



public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .AddCloudFoundryConfiguration()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

public class RestClientConfiguration : IRestClientConfiguration
    {
        private IConfiguration _configuration;
        private CloudFoundryApplicationoptions _appOptions { get; set; }
        private CloudFoundryServicesOptions _serviceOptions { get; set; }

        public RestClientConfiguration(IConfiguration configuration,IOptions<CloudFoundryApplicationoptions> appOptions,IOptions<CloudFoundryServicesOptions> serviceOptions)
        {
            _configuration = configuration;
            _appOptions = appOptions.Value;
            _serviceOptions = serviceOptions.Value;
        }

        public string ClientId => _serviceOptions.Services["user-provided"]
                            .Where(a => a.Name.Equals("VCAP_SERVICES"))
                           .First(q => q.Name.Equals("credhub"))
                           .Credentials["clientid"].Value;

        public string Secret => _serviceOptions.Services["System-Provided"]
                                      .Where(a => a.Name.Equals("VCAP_SERVICES"))
                                       .First(q => q.Name.Equals("credhub"))
                                       .Credentials["clientsecret"].Value;
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)