Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
ASP.NET Core fornisce un'API di crittografia per proteggere i dati, inclusa la gestione e la rotazione delle chiavi.
Le app Web spesso devono archiviare dati sensibili. L'API protezione dati di Windows (DPAPI) non è destinata all'uso nelle app Web.
Lo stack di protezione dei dati core ASP.NET è stato progettato per:
- Fornire una soluzione predefinita per la maggior parte degli scenari Web.
- Risolvere molte delle carenze del sistema di crittografia precedente.
- Utilizzare come sostituzione per l'elemento
<machineKey>
in ASP.NET 1.x - 4.x.
Presentazione del problema
È necessario rendere persistenti le informazioni attendibili per il recupero successivo, ma non si considera attendibile il meccanismo di persistenza. In termini Web, questo potrebbe essere scritto come devo eseguire un'andata e ritorno dello stato attendibile tramite un client non attendibile.
L'autenticità, l'integrità e la protezione da manomissioni sono un requisito. L'esempio canonico di questo è un token di autenticazione cookie o un token di autorizzazione. Il server genera un token "I am Groot e ho le autorizzazioni xyz" e lo invia al client. Il client presenta il token al server, ma il server necessita di un certo tipo di garanzia che il client non abbia contraffatto il token.
La riservatezza è un requisito. Poiché lo stato persistente è considerato attendibile dal server, questo stato potrebbe contenere informazioni che non devono essere divulgate a un client non attendibile. Ad esempio:
- Percorso del file.
- Autorizzazione.
- Un riferimento o un altro riferimento indiretto.
- Alcuni dati specifici del server.
L'isolamento è un requisito. Poiché le app moderne sono componentizzate, i singoli componenti vogliono sfruttare questo sistema senza considerare altri componenti del sistema. Considera, ad esempio, un componente del token di tipo bearer usando questo stack. Deve funzionare senza interferenze, ad esempio da un meccanismo anti-CSRF che utilizza inoltre lo stesso stack.
Alcuni presupposti comuni possono limitare l'ambito dei requisiti:
- Tutti i servizi che operano all'interno del sistema di crittografia sono ugualmente attendibili.
- I dati non devono essere generati o utilizzati al di fuori dei servizi sotto il controllo diretto.
- Le operazioni devono essere veloci perché ogni richiesta al servizio Web potrebbe passare attraverso il sistema di crittografia una o più volte. Il requisito di velocità rende la crittografia simmetrica ideale. La crittografia asimmetrica non viene usata fino a quando non è necessaria.
Filosofia di progettazione
ASP.NET Core protezione dati è un facile da usare stack di protezione dei dati. e si basano sui principi seguenti:
- Facilità di configurazione. Il sistema punta a una configurazione zero. Nelle situazioni in cui gli sviluppatori devono configurare un aspetto specifico, ad esempio il repository delle chiavi, tali configurazioni specifiche non sono difficili.
- Offrire un'API di base rivolta ai consumer. Le API sono semplici da usare correttamente e difficili da usare in modo non corretto.
- Gli sviluppatori non devono apprendere i principi chiave di gestione. Il sistema gestisce la selezione dell'algoritmo e la durata delle chiavi per conto dello sviluppatore. Lo sviluppatore non ha accesso al materiale chiave non elaborato.
- Le chiavi sono protette a riposo il più possibile. Il sistema individua un meccanismo di protezione predefinito appropriato e lo applica automaticamente.
Le API di protezione dei dati non sono destinate principalmente alla persistenza illimitata dei payload riservati. Altre tecnologie, ad esempio DPAPI CNG di Windows e Azure Rights Management , sono più adatte allo scenario di archiviazione illimitata. Hanno corrispondenti funzionalità di gestione delle chiavi avanzate. Detto questo, le API di protezione dei dati di base ASP.NET possono essere usate per la protezione a lungo termine dei dati riservati.
Destinatari
Il sistema di protezione dei dati fornisce API destinate a tre destinatari principali:
Le API consumer sono destinate agli sviluppatori di applicazioni e framework.
Non voglio sapere come funziona lo stack o su come viene configurato. Voglio solo eseguire un'operazione con alta probabilità di usare correttamente le API.
Le API di configurazione sono destinate agli sviluppatori di app e agli amministratori di sistema.
È necessario indicare al sistema di protezione dei dati che l'ambiente richiede percorsi o impostazioni non predefiniti.
Le API di estendibilità sono destinate agli sviluppatori responsabili dell'implementazione di criteri personalizzati. L'uso di queste API è limitato a rare situazioni e sviluppatori con esperienza di sicurezza.
Devo sostituire un intero componente all'interno del sistema perché ho requisiti comportamentali veramente univoci. Sono disposto a imparare parti usate raramente della superficie API per creare un plug-in che soddisfi i miei requisiti.
Layout del pacchetto
Lo stack di protezione dei dati è costituito da cinque pacchetti:
Microsoft.AspNetCore.DataProtection.Abstractions contiene:
- Le interfacce IDataProtectionProvider e IDataProtector per creare servizi di protezione dei dati.
- Metodi di estensione utili per lavorare con questi tipi. Ad esempio, IDataProtector.Protect
Se il sistema di protezione dei dati viene creato un'istanza altrove e si utilizza l'API, fare riferimento a
Microsoft.AspNetCore.DataProtection.Abstractions
.Microsoft.AspNetCore.DataProtection contiene l'implementazione principale del sistema di protezione dei dati, tra cui:
- Operazioni di crittografia di base.
- Gestione delle chiavi.
- Configurazione ed estendibilità.
Per creare un'istanza del sistema di protezione dei dati, fare riferimento a
Microsoft.AspNetCore.DataProtection
. Potrebbe essere necessario fare riferimento al sistema di protezione dei dati quando:- Aggiungerlo a un IServiceCollection.
- Modificare o estendere il suo comportamento.
Microsoft.AspNetCore.DataProtection.Extensions contiene API aggiuntive che gli sviluppatori potrebbero trovare utili ma che non appartengono al pacchetto principale. Ad esempio, questo pacchetto contiene:
- Metodi factory per creare un'istanza del sistema di protezione dei dati per archiviare le chiavi in un percorso nel file system senza iniezione delle dipendenze. Vedere DataProtectionProvider.
- Metodi di estensione per limitare la durata dei payload protetti. Vedere ITimeLimitedDataProtector.
Microsoft.AspNetCore.DataProtection.SystemWeb può essere installato in un'app esistente ASP.NET 4.x per reindirizzare
<machineKey>
le operazioni per usare il nuovo stack di protezione dei dati di ASP.NET Core. Per altre informazioni, vedere Sostituire machineKey ASP.NET in ASP.NET Core.Microsoft.AspNetCore.Cryptography.KeyDerivation fornisce un'implementazione della routine di hashing delle password PBKDF2 e può essere usata dai sistemi che devono gestire le password utente in modo sicuro. Per altre informazioni, vedere Hash password in ASP.NET Core.
Risorse aggiuntive
ASP.NET Core fornisce un'API di crittografia per proteggere i dati, inclusa la gestione e la rotazione delle chiavi.
Le app Web spesso devono archiviare dati sensibili. L'API protezione dati di Windows (DPAPI) non è destinata all'uso nelle app Web.
Lo stack di protezione dei dati core ASP.NET è stato progettato per:
- Fornire una soluzione predefinita per la maggior parte degli scenari Web.
- Risolvere molte delle carenze del sistema di crittografia precedente.
- Funziona come sostituzione per l'elemento
<machineKey>
in ASP.NET 1.x - 4.x.
Presentazione del problema
È necessario rendere persistenti le informazioni attendibili per il recupero successivo, ma non si considera attendibile il meccanismo di persistenza. In termini web, questo potrebbe essere scritto come devo gestire l'andata e ritorno dello stato attendibile tramite un client non attendibile.
L'autenticità, l'integrità e la protezione dalle manomissioni sono un requisito. L'esempio canonico di questo è un token di autenticazione cookie o un bearer token. Il server genera un token I am Groot e ho autorizzazioni xyz e lo invia al client. Il client presenta il token al server, ma il server necessita di un certo tipo di garanzia che il client non abbia contraffatto il token.
La riservatezza è un requisito. Poiché lo stato persistente è considerato attendibile dal server, questo stato potrebbe contenere informazioni che non devono essere divulgate a un client non attendibile. Ad esempio:
- Percorso del file
- Autorizzazione.
- Puntatore o altro riferimento indiretto.
- Alcuni dati specifici del server.
L'isolamento è un requisito. Poiché le app moderne sono componentizzate, i singoli componenti vogliono sfruttare questo sistema senza considerare altri componenti del sistema. Si consideri, ad esempio, un componente del token portatore usando questo stack. Deve funzionare senza alcuna interferenza, ad esempio da un meccanismo anti-CSRF che utilizza lo stesso stack.
Alcuni presupposti comuni possono limitare l'ambito dei requisiti:
- Tutti i servizi che operano all'interno del sistema di crittografia sono ugualmente attendibili.
- I dati non devono essere generati o utilizzati al di fuori dei servizi sotto il controllo diretto.
- Le operazioni devono essere veloci perché ogni richiesta al servizio Web potrebbe passare attraverso il sistema di crittografia una o più volte. Il requisito di velocità rende la crittografia simmetrica ideale. La crittografia asimmetrica non viene usata fino a quando non è necessaria.
Filosofia di progettazione
ASP.NET Core è uno stack di protezione dei dati facile da usare. e si basano sui principi seguenti:
- Facilità di configurazione. Il sistema punta a nessuna configurazione. Nelle situazioni in cui gli sviluppatori devono configurare un aspetto specifico, ad esempio il repository delle chiavi, tali configurazioni specifiche non sono difficili.
- Offrire un'API di base rivolta ai consumer. Le API sono semplici da usare correttamente e difficili da usare in modo non corretto.
- Gli sviluppatori non devono apprendere i principi chiave di gestione. Il sistema gestisce la selezione dell'algoritmo e la durata delle chiavi per conto dello sviluppatore. Lo sviluppatore non ha accesso al materiale chiave non elaborato.
- Le chiavi sono protette a riposo il più possibile. Il sistema individua un meccanismo di protezione predefinito appropriato e lo applica automaticamente.
Le API di protezione dei dati non sono destinate principalmente alla persistenza illimitata dei payload riservati. Altre tecnologie, ad esempio DPAPI CNG di Windows e Azure Rights Management , sono più adatte allo scenario di archiviazione illimitata. Hanno corrispondenti funzionalità di gestione delle chiavi avanzate. Detto questo, le API di protezione dei dati di base ASP.NET possono essere usate per la protezione a lungo termine dei dati riservati.
Destinatari
Il sistema di protezione dei dati fornisce API destinate a tre destinatari principali:
Le API consumer sono destinate agli sviluppatori di applicazioni e framework.
Non voglio sapere come funziona lo stack o su come viene configurato. Voglio solo eseguire un'operazione con alta probabilità di usare correttamente le API.
Le API di configurazione sono destinate agli sviluppatori di app e agli amministratori di sistema.
È necessario indicare al sistema di protezione dei dati che l'ambiente richiede percorsi o impostazioni non predefiniti.
Le API di estendibilità sono destinate agli sviluppatori responsabili dell'implementazione di criteri personalizzati. L'uso di queste API è limitato a rare situazioni e sviluppatori con esperienza di sicurezza.
Devo sostituire un intero componente all'interno del sistema perché ho requisiti comportamentali veramente univoci. Sono disposto a imparare parti usate raramente della superficie API per creare un plug-in che soddisfi i miei requisiti.
Layout del pacchetto
Lo stack di protezione dei dati è costituito da cinque pacchetti:
Microsoft.AspNetCore.DataProtection.Abstractions contiene:
- IDataProtectionProvider e IDataProtector interfacce per creare servizi di protezione dei dati.
- Metodi di estensione utili per lavorare con questi tipi. Ad esempio, IDataProtector.Protect
Se il sistema di protezione dei dati viene creato un'istanza altrove e stai usando l'API, fare riferimento a
Microsoft.AspNetCore.DataProtection.Abstractions
.Microsoft.AspNetCore.DataProtection contiene l'implementazione principale del sistema di protezione dei dati, tra cui:
- Operazioni di crittografia di base.
- Gestione delle chiavi.
- Configurazione ed estendibilità.
Per creare un'istanza del sistema di protezione dei dati, consultare
Microsoft.AspNetCore.DataProtection
. Potrebbe essere necessario fare riferimento al sistema di protezione dei dati quando:- Aggiunta a un oggetto IServiceCollection.
- Modifica o estensione del relativo comportamento.
Microsoft.AspNetCore.DataProtection.Extensions contiene API aggiuntive che gli sviluppatori potrebbero trovare utili ma che non appartengono al pacchetto principale. Ad esempio, questo pacchetto contiene:
- Metodi factory per istanziare il sistema di protezione dei dati per archiviare le chiavi in un percorso del file system senza l'iniezione delle dipendenze. Vedere DataProtectionProvider.
- Metodi di estensione per limitare la durata dei payload protetti. Vedere ITimeLimitedDataProtector.
Microsoft.AspNetCore.DataProtection.SystemWeb può essere installato in un'app esistente ASP.NET 4.x per reindirizzare
<machineKey>
le operazioni per usare il nuovo stack di protezione dei dati di ASP.NET Core. Per ulteriori informazioni, vedere Sostituire la machineKey di ASP.NET in ASP.NET Core.Microsoft.AspNetCore.Cryptography.KeyDerivation fornisce un'implementazione della routine di hashing delle password PBKDF2 e può essere usata dai sistemi che devono gestire le password utente in modo sicuro. Per altre informazioni, vedere Hash password in ASP.NET Core.