2016-05-08 38 views
18

Sono in esecuzione un server di produzione (Windows Server 2012) con un sito Web Aspnet Mvc Core RC1.AspNet Core che utilizza in repo di memoria per la protezione dei dati durante l'esecuzione in IIS

sto vedendo la seguente nei registri:

Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits. 

Dopo aver ispezionato il codice sorgente per DataProtection, ho rintracciato il problema al metodo seguente chiamata:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

Questo è probabilmente tornando null sul server per qualche motivo. Non ho alcuna configurazione personalizzata speciale sul posto e ho letto il docs quindi ho pensato che il default avrebbe funzionato.

Penso che il problema sia con il sito Web IIS non in esecuzione nel contesto di un certo utente, ma non ho idea di come confermare o correggere questo. Il mio sito web è configurato con il proprio pool.

Per inciso: il risultato dell'esecuzione di un repository in memoria per la memorizzazione delle chiavi provoca loro di riciclare quando la chiusura dell'applicazione che è molto fastidioso e nemmeno destinati all'utilizzo in ambienti di produzione.

+0

L'identità dell'applicazione è impostata per caricare il suo profilo utente? – TGlatzer

+0

@TGlatzer Penso che questo sia il problema (oltre a qualcosa sui contenitori). Cercherò di mancare con esso quando avrò accesso al server. – mrahhal

risposta

11

Il profilo utente deve essere caricato nella configurazione di IIS.

Aprire IIS, fare clic con il pulsante destro del mouse su Pool di applicazioni, quindi Impostazioni avanzate. E imposta "Carica profilo utente" su vero. Riavvia la tua app e dovrebbe funzionare perfettamente.

+0

Sul mio IIS era già impostato su true che non risolve questo errore per me ... –

+0

Ma ... whyy ??? Ha iniziato a succedere adesso? Qualcosa è cambiato? Non capisco. – ppumkin

3

Le chiavi di protezione dei dati utilizzate dalle applicazioni ASP.NET sono memorizzate negli alveari del registro esterni alle applicazioni. Quando si esegue l'applicazione come identità di AppPool, è necessario creare un hive del Registro di sistema per ogni AppPool utilizzato con un'applicazione ASP.NET Core.

Per installazioni IIS standalone, è possibile utilizzare Data Protection PowerShell scriptper ogni pool di applicazioni utilizzato con un'applicazione ASP.NET Core. Le chiavi verranno mantenute nel registro.

Come indicato chiaramente nei registri poiché l'hive del Registro di sistema che cerca Protezione dati non esiste, le chiavi non verranno mantenute sul disco. Invece, saranno effimeri e vivranno solo nella memoria.

In scenari di Web farm, un'applicazione può essere configurata per utilizzare un percorso UNC per archiviare il relativo portachiavi di protezione dati. Per impostazione predefinita, le chiavi di protezione dei dati non sono crittografate. È possibile distribuire un certificato x509 su ciascuna macchina per crittografare il portachiavi.

Vedere la official ASP.NET Core docs per ulteriori informazioni

+0

Questa è la risposta corretta, in pratica devi dire a IIS dove memorizzare la chiave in modo che possa accedere nuovamente tra le sessioni. Ho appena risposto a una domanda simile https://stackoverflow.com/questions/46225867/is-it-possible-to-persist-cookies-between-visual-studio-debug-sessions/46657239#46657239 –

0

Date un'occhiata a this from the DataProtection Git repository

In breve, c'è un bug in IIS che non può mai essere corretto che impediscono l'installazione di registro corretto per le chiavi sulla protezione dei dati. C'è un powershell script per configurare manualmente il registro in modo corretto in modo che funzioni per AspNet Core. Dopo aver eseguito lo script per ciascun pool di applicazioni utilizzato per le applicazioni AspNet Core, tali applicazioni funzioneranno come previsto.

+0

Cos'altro posso fare se sono nell'ambiente ospitato in cui i diritti di accesso sono molto limitati. Non riesco a eseguire lo script PowerShell né a modificare le impostazioni del pool di applicazioni? – kliszaq

+0

Sei in una situazione difficile ... Penso che dovresti controllare se è possibile trovare qualcuno che ha accesso a farlo. Normalmente, dovresti essere in grado di trovare qualcuno/procedura per modificare le configurazioni del server se giustificato con un lavoro di carta. In bocca al lupo! – Yepeekai