Don’t store secrets in your configs!
Even locally on your dev machine there are options.
In .NET you can replace a setting in appsettings.json with a secret from the “secrets store”.
The dotnet CLI has commands for managing these secrets.
Using the dotnet user-secrets CLI
From the project directory - initiate the secret storage with the command:
dotnet user-secrets initThis will add a <UserSecretsId> element to your .csproj file:
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<UserSecretsId>c7dafe55-cb55-4076-b446-f13299741441</UserSecretsId>
</PropertyGroup>To add a secret to the user store, run the following command from the project folder:
dotnet user-secrets set "ThePath:ToTheSecret:InAppsettingsJson" "secretgoeshere"This will create a folder with the same name as the <UserSecretsId> in the user’s profile directory. In this directory a secrets.json file will be created, which will contain the secrets in a JSON format.
The path to the JSON file would be:C:\Users\%username%\AppData\Roaming\Microsoft\UserSecrets\c7dafe55-cb55-4076-b446-f13299741441\secrets.json
And the content of the file would be:
{
"ThePath:ToTheSecret:InAppsettingsJson": "secretgoeshere"
}Note that the secret is stored in clear text, so it’s not a secure storage. However, this ensures that the secret is not checked into source control.
Further the secrets can be listed with the command:
dotnet user-secrets listAnd removed with the command:
dotnet user-secrets remove "ThePath:ToTheSecret:InAppsettingsJson"Or completely wiped with:
dotnet user-secrets clearMapping the secrets to the appsettings.json configuration
In your Program.cs you must add a call to AddUserSecrets() to load the user secrets:
public static IHostBuilder CreateWebHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
if (hostingContext.HostingEnvironment.IsDevelopment())
config.AddUserSecrets<Startup>();
});References:
https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-9.0&tabs=windows

