问题描述
我有一个.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 (将#修改为@)