710 messaggi dal 13 novembre 2008
Contributi
ciao,
sto sviluppando una azure webapp in mvc6, dopo aver letto la doc di netcore relativa a dove salvare le varie user key connection strings per l'app, ho le idee ancora più confuse.

per la fase di sviluppo mi è bastato inserire le varie chiavi di configurazione nel file appsettings.json, poi recuperate nel codice con qualcosa del tipo _config.GetSection("AzureStorageConnectionString").GetSection("ConnectionString").Value

il fatto di inserire le chiavi in un file json, seppur flessibile, mi sembra un sistema a dir poco non sicuro in ambiente di produzione

attualmente mi trovo nella condizione di dover affrontare i primi test dell'app completa su Azure, continuando comunque ad avere un ambiente locale a disposizione: su Azure potrei settare chiavi e connessioni negli appsettings dell'app dal portale, che mi sembra la cosa migliore, si può fare lo stesso in locale utilizzando ad esempio le variabili di ambiente nelle proprietà dell'app (ma poi dovrei evitare di fare il deploy di launchsettings.json...) ? La rilettura di questi valori è in questo modo 'unificata' tra sviluppo e produzione, senza files o codice differente?

grazie!
Modificato da teo prome il 18 luglio 2016 08.41 -
Modificato da teo prome il 18 luglio 2016 08.42 -
Modificato da teo prome il 18 luglio 2016 10.08 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


il fatto di inserire le chiavi in un file json, seppur flessibile, mi sembra un sistema a dir poco non sicuro in ambiente di produzione

Puoi spiegare come mai? A livello di sicurezza, mi sembra equivalente all'usare il vecchio web.config o le variabili d'ambiente. Le chiavi sono ugualmente al sicuro, a meno che ovviamente qualche utente non autorizzato non riesca ad accedere al server.

Il tuo scopo per proteggere tali chiavi qual è?
  • Ci sono più sviluppatori in questo progetto e non vuoi che usino le tue chiavi personali?
  • Si tratta di un progetto open source e non vuoi che vengano committate nel repository pubblico?


Secondo me potresti definire le chiavi nell'appsettings.json e valorizzarle con stringhe tipo "Metti qui la tua connection string all'Azure Service Bus" e poi, di fatto ne imposti il valore usando il secret manager tool descritto nella documentazione:
https://docs.asp.net/en/latest/security/app-secrets.html
I valori impostati in questo modo andranno a sovrascrivere quelli dell'appsettings.json.

In questo modo i valori delle tue chiavi non andranno a finire in alcun file del progetto, ma saranno archiviati nella cartella App_Data del tuo utente Windows. E' un buon sistema per gestire i valori delle chiavi durante lo sviluppo.


La rilettura di questi valori è in questo modo 'unificata' tra sviluppo e produzione, senza files o codice differente?

Mmmh, che intendi? Se guardi il codice del tuo metodo Startup avrai qualcosa del genere:
var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

    if (env.IsDevelopment())
    {
        // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
        builder.AddUserSecrets();
    }

    builder.AddEnvironmentVariables();


Vedi quindi che l'oggetto ConfigurationBuilder viene "popolato" di fonti da cui è possibile ottenere valori per le varie chiavi di configurazione. L'ordine è importante, quindi la presenza di una variabile d'ambiente è più prioritaria (cioè sovrascrive) del valore impostato tramite il Secret Manager Tool che, a sua volta, è più prioritario dei file json.

In questo modo, per un altro sviluppatore che usa il tuo sorgente, è molto facile andare a definire i valori nel modo che gli sembra più consono, dato che hai configurato varie fonti da cui poterli attingere.

ciao,
Moreno

Enjoy learning and just keep making
710 messaggi dal 13 novembre 2008
Contributi
innanzitutto grazie Moreno, come il web.config qualsiasi json è sicuro fino ad un certo punto soprattutto se non criptato, in sostanza non mi piace avere un json con tutte le chiavi in rete nella cartella dell'app; il mio problema non riguarda la fase di sviluppo, ma dove inserire queste key-value in rete

Vedi quindi che l'oggetto ConfigurationBuilder viene "popolato" di fonti da cui è possibile ottenere valori per le varie chiavi di configurazione. L'ordine è importante, quindi la presenza di una variabile d'ambiente è più prioritaria (cioè sovrascrive) del valore impostato tramite il Secret Manager Tool che, a sua volta, è più prioritario dei file json.


perfetto! questo l'ho capito dopo! partendo da questo presupposto alla fine ho inserito le chiavi-valori nell'apposita sezione relativa alle variabili di Azure --> Impostazioni app

ciao e grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.