2011-10-19 15 views
9

Estamos teniendo problemas con Safari (y Opera) y, por lo que he leído, las cookies de FedAuth son demasiado grandes.W.I.F .: Establecer IsSessionMode en true, parece que no puede suceder

Hay un "truco" para solucionar este problema:. "WIF RTM añade un alojamiento a la SessionAuthenticationModule, IsSessionMode Cuando volcó en true, IsSessionMode tiene el efecto de asegurar que el SessionSecurityToken permanece en la memoria caché para toda la duración de la sesión y generando una cookie que contiene solo un identificador de sesión en lugar del contenido de la sesión en sí ".

tengo este código en global.asax:

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, Microsoft.IdentityModel.Web.SessionSecurityTokenCreatedEventArgs e) 
{ 
    FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true; 
} 

problema es simple, "FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true" nunca se agota, no tengo ni idea de por qué. ¿¿Vos si?? ¿O sabe cómo usar "PassiveSignInControl" para establecer IsSessionMode en verdadero?

http://social.msdn.microsoft.com/Forums/en/Geneva/thread/ea00ec3f-ebdf-427c-929f-d4a196650552 http://blogs.msdn.com/b/vbertocci/archive/2010/05/26/your-fedauth-cookies-on-a-diet-issessionmode-true.aspx

De el libro "Programming Windows® Identity Foundation": "Una propiedad interesante del SAM es IsSessionMode. Cuando se establece en verdadero, IsSessionMode tiene el efecto de almacenar la mayor parte de la sesión en un caché de token del lado del servidor en lugar de escribir todo en la cookie. La cookie solo contendrá un pequeño identificador de contexto, que se usará para recuperar la sesión en el servidor. Desafortunadamente, en esta versión de la Parte 92, la identificación de Windows y Foundation for Identity Developers producto no hay forma de configurar IsSessionMode desde el archivo de configuración. Se puede establecer a través de un propiedad del PassiveSignInControl, o en el archivo Global.asax de la siguiente manera (mismo código que el anterior)"

+0

Vale, puede sonar después de leer este comentario como si no hubiera intentado esto por mucho tiempo, pero eso no es cierto. Pensé que "WSFederationAuthenticationModule_SessionSecurityTokenCreated" se ejecutaría cada vez que un usuario iniciara sesión, ahora se ejecuta al azar con frenos largos. Podría estar ejecutándose cuando esté renovando la cookie. ¿Cuándo se supone que se ejecutará "WSFederationAuthenticationModule_SessionSecurityTokenCreated"? – DoctorArnar

Respuesta

3

¿Ha registrado su controlador de eventos para el evento SessionSecurityTokenCreated?

FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated 
    += this.WSFederationAuthenticationModule_SessionSecurityTokenCreated; 

esta línea tiene que ser añadido a la Application_Start medthod en su archivo Global.asax.

la clase FederatedAuthentication en el espacio de nombres en Microsoft.IdentityModel.Web.

+1

Hemos intentado eso y no lo tiene en Application_Start porque: ' 'Microsoft.IdentityModel.Web.FederatedAuthentication.WSFederationAuthenticationModule' WSFederationAuthenticationModule inició una excepción del tipo 'System.NullReferenceException' Microsoft.IdentityModel.Web.WSFederationAuthenticationModule {System.NullReferenceException } ' – DoctorArnar

0

Hola intente esto: en lugar del evento SessionSecurityTokenCreated utilizar el SecurityTokenValidated

En el global.ascx

void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e) 
{ 
    FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true; 
} 

Comprobar el comentario de Dominick Baier blog

7

hilo viejo, pero creo que es la correcta SessionSecurityTokenCreated evento para manejar esto - lo probé y funciona bajo "WIF antiguo" y NET 4.5 con las variaciones apropiadas del espacio de nombres.

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, System.IdentityModel.Services.SessionSecurityTokenCreatedEventArgs e) 
{ 
    e.SessionToken.IsReferenceMode = true; 
} 
+0

http://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.sessionsecuritytoken.isreferencemode(v=vs.110).aspx * Para operar en modo de referencia, Microsoft recomienda proporcionar un controlador para el evento WSFederationAuthenticationModule.SessionSecurityTokenCreated ... que establece la propiedad IsReferenceMode en el token pasado en la propiedad SessionSecurityTokenCreatedEventArgs.SessionToken. Esto asegurará que el token de sesión funcione en modo de referencia para cada solicitud y se ve favorecido por la mera configuración de la propiedad SessionAuthenticationModule.IsReferenceMode ... * –

Cuestiones relacionadas