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:
![](https://www.aspitalia.com/script/images/1432.jpg)
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
Cambiare la chiave di partizionamento di Azure Cosmos DB
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Definire stili a livello di libreria in Angular
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Generare velocemente pagine CRUD in Blazor con QuickGrid
Sostituire la GitHub Action di login su private registry
Sfruttare al massimo i topic space di Event Grid MQTT
Load test di ASP.NET Core con k6
Disabilitare automaticamente un workflow di GitHub
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Short-circuiting della Pipeline in ASP.NET Core