2015-11-13 6 views
20

Utilizzo API MachineKey per crittografare/decrittografare una parte di informazioni in un'applicazione ASP.NET. Sto usandoIl codice macchina cambia quando viene riciclato il pool di applicazioni

MachineKey.Encode(data, MachineKeyProtection.All)

e

MachineKey.Decode(data, MachineKeyProtection.All)

metodi di API. Tutto funziona alla grande su Windows 8 e Windows Server 2012 quando Load User Profile è abilitato. Il problema è che per qualche motivo non sopravvive al riavvio del pool di app su Windows Server 2008 R2 with IIS 7.5.

Inizialmente ho avuto impressione che ho bisogno di abilitare Carica profilo utente impostazione Pool di applicazioni ma questo non fa alcuna differenza. Qualche idea di cosa potrei mancare qui?

Grazie

risposta

12

potrebbe essere che una nuova chiave macchina viene generato da IIS ogni volta che il pool di applicazioni ricicla. Prova a impostare una chiave computer statica nel tuo web.config come descritto qui: IIS 7 Tip #10 You can generate machine keys from the IIS manager. Senza impostare esplicitamente una chiave macchina statica, la chiave di crittografia/decrittografia è una destinazione mobile.

+1

In realtà l'idea di utilizzare l'API MachineKey era quella di sostituire DPAPI e senza preoccuparsi di impostare manualmente la chiave della macchina. La chiave statica funziona ma non è un'opzione in quanto l'API dovrebbe funzionare senza garantire una chiave univoca per le impostazioni di IIS. – Leadfoot

4

@pstricker ha ragione, se non è stata definita alcuna chiave macchina, quindi all'avvio del pool di applicazioni viene generata una nuova chiave. L'API MachineKey si basa sulla chiave del computer, quindi deve essere impostata da qualche parte. Se non si desidera impostare machineKey nella configurazione Web dell'applicazione, è comunque possibile farlo nella configurazione della macchina del server, qui: "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config "

Inoltre, se si desidera un codice macchina per pool di app, è possibile eseguire le operazioni descritte in here.