2010-07-28 14 views
14

Sto lavorando a un'applicazione Web che utilizza l'autenticazione basata su form.L'autenticazione basata su form funziona con i web load balancer?

<authentication mode="Forms"> 
     <forms slidingExpiration="true" 
     loginUrl="~/User.aspx/LogOn" 
     timeout="15" 
     name="authToken" /> 
    </authentication> 

sto vedendo questo cookie impostato nel mio browser quando accedo a:

alt text

La domanda è: cosa succede quando ho messo questo sito in un modello equilibrato di carico? Dove viene impostato il cookie di sessione ASP.net? Non l'ho fatto esplicitamente in codice, quindi presumo stia accadendo dietro le quinte da qualche parte in ASP.Net.

Inoltre, se il cookie di sessione è impostato dal server Web A, suppongo che il server Web B non lo riconoscerà e lo tratti come una sessione non valida. Se questo è il caso, probabilmente non voglio usarlo, giusto?

risposta

16

Dovrai impostare la chiave della macchina come uguale e il nome per essere uguale su entrambe le macchine ... se questo è fatto non dovresti avere problemi a bilanciare il carico con l'autenticazione dei moduli.

 <authentication mode="Forms"> 
     <forms loginUrl="~/Login/Index" defaultUrl="~/" 
        name=".myportal" 
        protection="All" slidingExpiration="true" timeout="20" path="/" 
        requireSSL="false"></forms> 
    </authentication> 

    <machineKey validationKey="534766AC57A2A2F6A71E6F0757A6DFF55526F7D30A467A5CDE102D0B50E0B58D613C12E27E7E778D137058E" decryptionKey="7059303602C4B0B3459A20F9CB631" decryption="Auto" validation="SHA1"/> 

Le sessioni possono essere leggermente più complicate. È possibile memorizzare lo stato della sessione ASP.Net nel database o utilizzare un provider di sessioni condivise per renderlo disponibile anche per il bilanciamento del carico.

Ecco un buon articolo sulla conservazione dello stato sessione nel DB: http://idunno.org/articles/277.aspx

+0

È inoltre necessario assicurarsi che si sta utilizzando un provider stato sessione che funziona su macchine (cioè * non * 'mode = "InProc" '), ma a parte questo, sì, funziona bene. –

+0

Ahh ... Capisco, quindi il cookie di sessione deve essere qualcosa come un timestamp crittografato. Presumo che la chiave della macchina sia utilizzata per crittografare/decifrare ed è per questo che deve essere la stessa. –

+0

Se si esegue il bilanciamento del carico, non è possibile utilizzare Session of mode = "InProc". Nemmeno con sessioni appiccicose. È necessario memorizzarlo in IIS, un database o creare il proprio provider. Ho implementato l'archiviazione della sessione in IIS e funziona perfettamente. – TheGeekYouNeed

Problemi correlati