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
Supportare la sessione affinity di Azure App Service con Application Gateway
Montare Azure Blob Storage su Linux con BlobFuse2
Integrare SQL Server in un progetto .NET Aspire
Gestione degli eventi nei Web component HTML
Gestione file Javascript in Blazor con .NET 9
Semplificare i deployment con le label in Azure Container App
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Eseguire query in contemporanea con EF
Creare un agente A2Acon Azure Logic Apps
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Implementare il throttle in JavaScript


