2015-04-12 16 views
22

È in esecuzione un sito Web di Azure. Ogni volta che distribuisco, tutti vengono disconnessi perché le modifiche machineKey.Come impostare machineKey sul sito Web di Azure

Ho specificato machineKey nello web.config ma questo non ha risolto il problema. Credo che questo sia dovuto al fatto che Azure sovrascrive automaticamente lo machineKey[1].

Ho trovato un paio di domande simili qui ma le risposte si collegano ai collegamenti morti.

Quindi, qual è la soluzione? Sicuramente c'è un modo per mantenere gli utenti connessi, indipendentemente dalle distribuzioni su Azure.

+1

Un sito Web ospitato come WebRole o tramite siti Web di Azure? –

+0

Un sito Web di Azure. –

+0

Sei sicuro che non usi la sessione di InProc per disconnettere gli utenti? Stiamo utilizzando machineKey specificato in web.config per la crittografia dei cookie su un sito Web di Azure utilizzando la scalabilità automatica e non abbiamo problemi con la modifica dei tasti di macchina su scalabilità o su nuove distribuzioni. – jakobandersen

risposta

0

Se Azure sta riscrivendo il tuo machineKey, non puoi farci molto, dato che fa parte della loro infrastruttura. Tuttavia, ci sono altri metodi.

Override FormsAuthentication

Questo non dovrebbe essere difficile, come si può facilmente cercare per il codice sorgente di FormsAuthentication e creare la propria logica e sostituire MachineKey con la propria chiave memorizzata nel web.config o nel database.

autenticazione personalizzato Filtro

Il modo più semplice sarebbe quella di creare un filtro e verificare, verificare, cripta decripta i cookie nel filtro. È necessario eseguire questa operazione sul metodo OnAuthorization e creare una nuova istanza di IPrincipal e impostare IsAuthenticated su true se la descrizione ha avuto esito positivo.

OAuth

  1. Abilita OAuth e creare OAuthProvider. Tuttavia è necessario ospitare OAuthProvider sul server che è nel tuo controllo in quanto sarà necessario che machineKey funzioni.
  2. Abilita OAuth di terze parti, se abiliti OAuth con Google, Facebook, ecc. Sarà facile in quanto l'utente verrà reindirizzato al provider OAuth e continuerà ad accedere automaticamente e verrà stabilita una nuova sessione.
15

provare a reimpostare la sezione di configurazione chiave-macchina al momento Application_Start:

protected void Application_Start() 
{ 
    // ... 

    var mksType = typeof(MachineKeySection); 
    var mksSection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection; 
    var resetMethod = mksType.GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance); 

    var newConfig = new MachineKeySection(); 
    newConfig.ApplicationName = mksSection.ApplicationName; 
    newConfig.CompatibilityMode = mksSection.CompatibilityMode; 
    newConfig.DataProtectorType = mksSection.DataProtectorType; 
    newConfig.Validation = mksSection.Validation; 

    newConfig.ValidationKey = ConfigurationManager.AppSettings["MK_ValidationKey"]; 
    newConfig.DecryptionKey = ConfigurationManager.AppSettings["MK_DecryptionKey"]; 
    newConfig.Decryption = ConfigurationManager.AppSettings["MK_Decryption"]; // default: AES 
    newConfig.ValidationAlgorithm = ConfigurationManager.AppSettings["MK_ValidationAlgorithm"]; // default: SHA1 

    resetMethod.Invoke(mksSection, new object[] { newConfig }); 
} 

È possibile che questo presuppone di impostare i valori appropriati nella sezione <appSettings>:

<appSettings> 
    <add key="MK_ValidationKey" value="...08EB13BEC0E42B3F0F06B2C319B..." /> 
    <add key="MK_DecryptionKey" value="...BB72FCE34A7B913DFC414E86BB5..." /> 
    <add key="MK_Decryption" value="AES" /> 
    <add key="MK_ValidationAlgorithm" value="SHA1" /> 
</appSettings> 

ma è possibile inserire il vostro valori effettivi da qualsiasi fonte di configurazione che ti piace.

+0

Grazie mille @ haim770. Sto testando questo ora e sembra che funzioni. –

+1

@ Mr.Flibble, l'ho provato anche su un sito Web di Azure gratuito. Tuttavia, poiché il team di Azure Websites sta costantemente sbloccando sempre più sezioni di 'Web.Config', credo che alla fine ti permetteranno di impostare normalmente MachineKey nella configurazione. – haim770

+0

Impressionante implementazione @ haim770. Sembra che questo non funzioni per noi. Stiamo utilizzando .NET 4.6.1 e utilizzando l'avvio di OWIN con app.UseCookieAuthentication() e utilizzando un provider di sessione cache Redis. Ho implementato quanto sopra, ma l'utente continua a disconnettersi dopo uno scambio di slot. Qualche idea? – gorillapower

0

Ho avuto lo stesso problema e nel mio caso stavo usando la procedura guidata webdeveloper in VS13. Ho pensato che stavo impazzendo perché avrei impostato il machinekey nel web.config e poi sarebbe stato modificato sul web.config distribuito per generare automaticamente. È qualcosa nello script/nelle impostazioni di webdeploy. La mia soluzione era di aprire il sito live azure da VS13 usando Server Explorer e quindi modificare il web.config e salvare le modifiche. Ciò ha conservato le mie impostazioni con le chiavi fornite e tutto funziona correttamente.

Problemi correlati