从launchSettings.json

时间:2019-08-30 12:48:09

标签: .net-core environment-variables config

在我的.net Core MVC应用程序中,在Startup.cs中的ConfigureServices方法中,我正在使用Azure Active Directory设置身份验证。当我从appsettings.json中获取clientId和clientSecret时,即使部署为Azure Web应用程序,一切都正常。

现在,我从架构师那里获得了重构的要求,而不是将其读取为环境变量(托管在Azure Kubernetes中而不是Web应用程序中的Docker容器)。但是,我找不到从lauchSettings.json中获取“身份验证”部分的方法,就像从appsettings.json中获取方法一样。

services.AddAuthentication(auth =>
        {
            auth.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            auth.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddOpenIdConnect(opts =>
        {
            Configuration.GetSection("Authentication").Bind(opts);

            opts.Events = new OpenIdConnectEvents
            {
                OnAuthorizationCodeReceived = async ctx =>
                {
                    HttpRequest request = ctx.HttpContext.Request;
                    string currentUri = UriHelper.BuildAbsolute(request.Scheme, request.Host, request.PathBase, request.Path);
                    var credential = new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(ctx.Options.ClientId, ctx.Options.ClientSecret);

这是代码行“ Configuration.GetSection(“ Authentication”)。Bind(opts);“我想改变,或者至少认为这是我要解决的问题。问题似乎出在ctx.opts.ClientId上,这就是当我注释掉“ Configuration.GetSection ....”行并运行解决方案时浏览器中的错误。

我也想提一下

string clientId = Environment.GetEnvironmentVariable("VARIABLE_CLIENT_ID"); 

在我的代码中起作用,因此我可以通过这种方式从launchSettings获取clientId。但是,当我尝试用字符串clientId替换代码片段中的ctx.Options.ClientId时,它不起作用(即使clientId具有正确的值)。

总的来说,问题是在我上面的代码中将launchSettings.json中的一部分绑定到“ opts”。实际上,它不必一定是一节,如有必要,我可能可以将值一一绑定。

有人知道如何解决我的问题吗?

0 个答案:

没有答案