Come sviluppatori, dobbiamo porre estrema attenzione a come gestire dati sensibili, come password, API Key o stringhe di connessione al database: aggiungere queste informazioni al file appsettings.json, per esempio, per poi magari pubblicare il nostro codice su un repository pubblico come GitHub espone a ovvi rischi - soprattutto per il fatto che, tramite history, è possibile recuperarli anche se sono stati eliminati dalla versione corrente del codice.
In linea generale, questi dati dovrebbero sempre restare confinati nell'ambiente di sviluppo, e magari salvati in una location del nostro disco differente da quella del progetto vero e proprio.
Fortunatamente, .NET SDK e Visual Studio dispongono di uno strumento per risolvere questo problema alla base, e in maniera del tutto trasparente per l'utente: Secret Manager.
Per prima cosa, dobbiamo attivare questa funzionalità sul progetto .NET. Tramite DotNet CLI possiamo invocare il metodo Init del modulo user-secrets:
dotnet user-secrets init
Se invece siamo in Visual Studio, ci basta selezionare l'opzione Manage User Secrets sul menu contestuale del progetto:

A questo punto, ciò che accade dietro le quinte è che viene creato un file JSON nella directory
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\
e questo identificativo viene successivamente memorizzato nel file di progetto nella proprietà UserSecretsId:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UserSecretsId>2e44673f-d3b7-45ba-bb62-6769880247f0</UserSecretsId> </PropertyGroup> ... </Project>
Secrets.json funziona alla stessa stregua di appsettings.json, pertanto possiamo editarlo direttamente in Visual Studio per aggiungere le nostre informazioni sensibili.
Alternativamente, possiamo anche aggiungere chiavi tramite DotNet CLI:
dotnet user-secrets set "Database:ConnectionString" "...."
Quando avviamo l'applicazione, se l'host environment è Development, il default builder effettuerà in automatico il merge di Secrets.json con appsettings.json, così che, dal nostro punto di vista, sarà possibile accedere a questi valori sensibili esattamente come tutti gli altri dati di configurazione:
public class WeatherForecastController : ControllerBase { private IConfiguration _config; public WeatherForecastController(IConfiguration config) { _config = config; } [HttpGet] public string Get() { var connectionString = _config["Database:ConnectionString"]; using var connection = new SqlConnection(connectionString); .... } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Selettore CSS :has() e i suoi casi d'uso avanzati
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
La gestione della riconnessione al server di Blazor in .NET 9
Eseguire i worklow di GitHub su runner potenziati
Utilizzare l nesting nativo dei CSS
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Usare il colore CSS per migliorare lo stile della pagina
Ordinare randomicamente una lista in C#
Referenziare un @layer più alto in CSS
Gestione CSS in Blazor con .NET 9
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
I più letti di oggi
- .NET Conference Italia 2018 - Milano
- Tutorial ASP.NET
- Seconda preview per i Dynamic Data Control 4.0
- Disponibile al download la versione finale di Mozilla Firefox 4
- Microsoft Security Bulletin MS02-044
- Shared Source Initiative per gli MVP
- Mono 1.1.10 per un po' di ASP.NET 2.0
- Webcast 'ASP.NET 2.0 HttpRuntime'