title: Azure web app cannot find the connection string
body: <p>I am just trying to publish my application in Azure as a Web App. I have been facing issue about the connection string. The server just can't identify what the connection string is, as you may see from the error below:</p>
  
  <pre><code>Unhandled Exception: Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/b99992c6-d6c5-4028-99b5-a1f106bb90bc. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
  Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/b99992c6-d6c5-4028-99b5-a1f106bb90bc. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. An attempt was made to access a socket in a way forbidden by its access permissions
  Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/b99992c6-d6c5-4028-99b5-a1f106bb90bc. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Visual Studio Token provider file not found at "D:\local\LocalAppData\.IdentityService\AzureServiceAuth\tokenprovider.json"
  Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/b99992c6-d6c5-4028-99b5-a1f106bb90bc. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. 'az' is not recognized as an internal or external command,
  operable program or batch file.
  
     at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAuthResultAsyncImpl(String authority, String resource, String scope, CancellationToken cancellationToken)
     at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.&lt;get_KeyVaultTokenCallback&gt;b__8_0(String authority, String resource, String scope)
     at Microsoft.Azure.KeyVault.KeyVaultCredential.PostAuthenticate(HttpResponseMessage response)
     at Microsoft.Azure.KeyVault.KeyVaultCredential.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
     at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretsWithHttpMessagesAsync(String vaultBaseUrl, Nullable`1 maxresults, Dictionary`2 customHeaders, CancellationToken cancellationToken)
     at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretsAsync(IKeyVaultClient operations, String vaultBaseUrl, Nullable`1 maxresults, CancellationToken cancellationToken)
     at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.LoadAsync()
     at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.Load()
     at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
     at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
     at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException&amp; hostingStartupErrors)
     at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
     at Synergy.Program.Main(String[] args) in C:\Users\Erkan Er\source\repos\Synergy\Program.cs:line 21
  </code></pre>
  
  <p>Below is the appsettings.json:</p>
  
  <pre><code>{
    "ConnectionStrings": {
      "DefaultConnection": "Data Source=server.database.windows.net;Initial Catalog=synergylearn_db;User ID=userid;Password=password;Connect Timeout=60;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;RunAs=App;",
      "AzureStorageConnectionString-1": "DefaultEndpointsProtocol=https;AccountName=encamina;AccountKey=V0/+NhCGcq1vBCc1wJ5L9V620fi5E0cX0cX4/pbOFzjqBxRapLBmaDt75LQcoX3HBskY/34E0MwGH/OWToryUg==;EndpointSuffix=core.windows.net"
    },
    "AppSettings": {
      "Secret": "abc"
    },
    "Logging": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "AllowedHosts": "*",
    "Authentication": {
      "Google": {
        "ClientId": "xxx",
        "ClientSecret": "xx"
      }
    }
  }
  </code></pre>
  
  <p>And, here is the <code>Startup.cs</code>:</p>
  
  <pre><code>    public Startup(IHostingEnvironment env)
      {
          var builder = new ConfigurationBuilder()
              .SetBasePath(env.ContentRootPath)
              .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
              .AddEnvironmentVariables();
          Configuration = builder.Build();
      }
  
      public IConfiguration Configuration { get; }
  
      public void ConfigureServices(IServiceCollection services)
      {
          services.AddCors();
          services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
              .AddJsonOptions(options =&gt; {
                  options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
              }); ;
  
  
          // configure strongly typed settings objects
          var appSettingsSection = Configuration.GetSection("AppSettings");
          services.Configure&lt;AppSettings&gt;(appSettingsSection);
  
          // configure jwt authentication
          var appSettings = appSettingsSection.Get&lt;AppSettings&gt;();
          var key = Encoding.ASCII.GetBytes(appSettings.Secret);
          services.AddAuthentication(x =&gt;
          {
              x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
              x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
          });
  
          services.AddDbContext&lt;SynergyDbContext&gt;( 
             options =&gt; options.UseSqlServer(
                 Configuration.GetConnectionString("DefaultConnection")
                 //Configuration["ConnectionStrings:DefaultConnection"]
                 )
             );
          services.AddTransient&lt;SynergyDbContext&gt;();
  </code></pre>
  
  <p>If I run it from the local computer, using the same settings, it works fine. But, it does not work on the server. Any ideas?</p>
  
  <p><strong>UPDATE</strong></p>
  
  <p>When, I check from the url <code>https://myapp.scm.azurewebsites.net/env</code>, I see this section:</p>
  
  <pre><code>Connection Strings
  LocalSqlServer
  ConnectionString = data source=.\SQLEXPRESS;Integrated 
  Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
  ProviderName = System.Data.SqlClient
  </code></pre>
  
  <p>And, also this section, where the correct connection string is displayed:</p>
  
  <pre><code>SQLCONNSTR_DefaultConnection = Data Source=server.database.windows.net;Initial Catalog=synergylearn_db;User ID=userid;Password=password;Connect Timeout=60;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;RunAs=App;
  </code></pre>