Dot.Blog

Consulting DotNet C#, XAML, WinUI, WPF, MAUI, IA

Comprendre et utiliser les user-secrets dans .NET

Lors du développement d’applications .NET, il est courant d’avoir besoin de stocker des informations sensibles : clés API, mots de passe, chaînes de connexion, etc.
Mais ces informations ne doivent jamais être stockées en clair dans le code source (ni dans appsettings.json, ni dans un dépôt Git).

C’est là qu’interviennent les user-secrets.

Qu’est-ce que les user-secrets ?

Les user-secrets (ou « secrets manager ») sont un mécanisme fourni par .NET pour stocker des valeurs sensibles en local, en dehors du projet et du dépôt Git.
Ils sont :

  • Stockés dans un dossier spécifique du profil utilisateur (hors répertoire de l’application)
  • Non versionnés (donc ne finissent pas dans GitHub)
  • Accessibles par votre code .NET au moment de l’exécution

💡 Les user-secrets sont uniquement destinés au développement. En production, il faut utiliser un gestionnaire de secrets adapté (ex. Azure Key Vault, AWS Secrets Manager, etc.).

Créer un fichier user-secrets pour un projet

Pour utiliser les user-secrets, votre projet doit avoir un UserSecretsId.

  1. Initialiser les user-secrets

Dans le terminal (à la racine du projet) :

dotnet user-secrets init

Cela ajoute dans le fichier .csproj du projet :

<PropertyGroup>

  <UserSecretsId>mon-projet-unique</UserSecretsId>

</PropertyGroup>

Ajouter ou modifier un secret

Pour ajouter une clé/valeur :

 

dotnet user-secrets set "OpenAI:ApiKey" "ma-clé-secrète"

  • "OpenAI:ApiKey" est la clé (vous pouvez utiliser la notation par section comme dans appsettings.json)
  • "ma-clé-secrète" est la valeur

Pour modifier un secret, relancez la même commande avec la nouvelle valeur.

Lister les secrets existants

Pour afficher les secrets associés au projet :

dotnet user-secrets list

Supprimer un secret

Pour supprimer un secret précis :

dotnet user-secrets remove "OpenAI:ApiKey"

Pour supprimer tous les secrets du projet :

dotnet user-secrets clear

Où sont stockés les secrets ?

En local, les secrets sont enregistrés dans un fichier JSON :

  • Windows : %APPDATA%\Microsoft\UserSecrets\<UserSecretsId>\secrets.json
  • Linux/macOS : ~/.microsoft/usersecrets/<UserSecretsId>/secrets.json

Exemple de contenu du fichier :

{

  "OpenAI:ApiKey": "ma-clé-secrète"

}

⚠️ Attention : les user-secrets ne sont pas chiffrés

Les valeurs stockées via dotnet user-secrets sont enregistrées en clair dans un fichier JSON situé sur votre machine (ex. %APPDATA%\Microsoft\UserSecrets\<UserSecretsId>\secrets.json sous Windows).

Ce mécanisme est destiné uniquement au développement local : il permet d’éviter de versionner vos secrets dans Git, mais il n’offre aucune protection si quelqu’un accède à votre machine.

👉 N’utilisez jamais les user-secrets en production. Privilégiez un gestionnaire de secrets sécurisé (Azure Key Vault, AWS Secrets Manager, etc.).

Utiliser les secrets dans le code C#

  1. Configuration dans Program.cs (ou Startup.cs)

Par défaut, lorsque vous initialisez les user-secrets, ils sont ajoutés au pipeline de configuration en développement.

Si vous utilisez un WebApplicationBuilder, la configuration est déjà prête :

var builder = WebApplication.CreateBuilder(args);

// Récupérer une valeur depuis les secrets

string apiKey = builder.Configuration["OpenAI:ApiKey"];

Console.WriteLine($"Clé API : {apiKey}");

  1. Exemple avec appsettings.json

Vous pouvez combiner les secrets avec appsettings.json. Les secrets surchargent les valeurs définies dans appsettings.json :

{

  "OpenAI": {

    "ApiKey": "valeur-par-défaut"

  }

}

User-secrets (via CLI) :

dotnet user-secrets set "OpenAI:ApiKey" "ma-clé-secrète"

Dans votre code :

string apiKey = builder.Configuration["OpenAI:ApiKey"];

// Résultat : "ma-clé-secrète" (priorité sur appsettings.json)

Exemple complet d’utilisation

Voici un exemple minimal d’application console utilisant un secret :

using Microsoft.Extensions.Configuration;
 
class Program
{
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: true)
            .AddUserSecrets<Program>() // Charger les user-secrets
            .Build();
        string apiKey = builder["OpenAI:ApiKey"];
        Console.WriteLine($"Clé API : {apiKey}");
    }
}

Bonnes pratiques

  1. N’initialisez pas plusieurs UserSecretsId : un par projet suffit.
  2. N’exposez jamais vos secrets dans le code (ni en clair, ni via Console.WriteLine en production).
  3. Combinez avec les variables d’environnement pour unifier les secrets en développement et en production.

Conclusion

Les user-secrets sont un outil simple et efficace pour protéger vos données sensibles en développement. Ils s’intègrent naturellement au pipeline de configuration de .NET et permettent de garder un code propre et sécurisé.

👉 Si vous déployez votre application, pensez à passer sur un gestionnaire de secrets sécurisé (Azure Key Vault, etc.) pour éviter toute fuite d’informations en production.

Stay Tuned !

Faites des heureux, PARTAGEZ l'article !