2010-07-28 14 views
14

Estoy trabajando en una aplicación web que usa autenticación de formularios.¿Funciona la autenticación de formularios con Web Load Balancers?

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

que estoy viendo esta cookie fijado en mi navegador al iniciar sesión:

alt text

La cuestión es qué sucede cuando pongo este sitio en un modelo equilibrado de carga? ¿Dónde se está configurando la cookie de sesión de ASP.net? No lo hice explícitamente en el código, así que supongo que está sucediendo detrás de las escenas en algún lugar de ASP.Net.

Además, si la cookie de sesión está configurada por el servidor web A, supongo que el servidor web B no lo reconocerá y lo tratará como una sesión no válida. Si este es el caso, probablemente no quiero usarlo, ¿verdad?

Respuesta

16

Tendrá que configurar la clave del equipo para que sea la misma y el nombre sea el mismo en ambas máquinas ... si esto se lleva a cabo, no debería tener problemas para equilibrar la carga con formularios auth.

 <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"/> 

Las sesiones pueden ser un poco más complicadas. Puede almacenar el estado de la sesión ASP.Net en la base de datos o utilizar un proveedor de sesión compartida para que esté disponible también para el equilibrio de carga.

Aquí es un buen artículo sobre el almacenamiento de estado de sesión en la base de datos: http://idunno.org/articles/277.aspx

+0

También es necesario asegurarse de que está utilizando un proveedor de estado de sesión que funciona en máquinas (es decir, * no * 'mode = "inproc" '), pero aparte de eso, sí funciona bien. –

+0

Ahh ... Ya veo, entonces la cookie de sesión debe ser algo así como una marca de tiempo encriptada. Supongo que la clave del equipo se usa para cifrar/descifrar y por eso debe ser igual. –

+0

Si está equilibrando la carga, no puede usar Session of mode = "InProc". Ni siquiera con sesiones adhesivas. Necesita almacenarlo en IIS, una base de datos o crear su propio proveedor. Implementé el almacenamiento de la sesión en IIS y funciona muy bien. – TheGeekYouNeed

Cuestiones relacionadas