Almacenamiento en caché de tokens de seguridad WIF

Tengo un sitio confiable para nuestro STS personalizado basado en WIF. Recientemente implementamos una caché de tokens de seguridad como se describe aquí: Azure / web-farm ready SecurityTokenCache. La principal diferencia entre nuestra implementación y la descrita en ese enlace es que usamos Azure AppFabric Caching como el almacén de respaldo para el caché duradero, en lugar del almacenamiento de la tabla. Esto ayudó a aliviarnos de un problema de truncamiento de token en ciertos navegadores, pero ha introducido un nuevo problema (vemos el problema de truncamiento principalmente en páginas que tienen cookies de google analytics + antiforgery además de la cookie fedauth). Ahora estamos recibiendo la siguiente excepción varios miles de veces por día:

System.IdentityModel.Tokens.SecurityTokenException
ID4243: Could not create a SecurityToken. A token was not found in the token cache and no cookie was found in the context.

System.IdentityModel.Tokens.SecurityTokenException: ID4243: Could not create a       SecurityToken. A token was not found in the token cache and no cookie was found in the context.
   at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver)
   at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver)
   at Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie)
   at Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken)
   at Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Esta excepción parece estar ocurriendo en un bucle de redireccionamiento, por lo que veremos cientos de ellos en un lapso de tiempo de 1-2 minutos.

No he podido localizar ninguna información útil mientras investigaba la excepción. La única pepita que tiene alguna esperanza hasta ahora es que alguien mencione que puede estar relacionado con el objeto en caché que caduca antes de la sesión.

No hemos podido reproducir el problema internamente y solo sabemos que existe debido a las miles de entradas que llenan nuestras tablas de Elmah. Cualquier ayuda o idea sería muy apreciada.

Eliminamos lo que pensamos que podría ayudar a resolver el problema (código a continuación) pero no tuvo ningún efecto:

HttpContext.Current.Response.Cookies.Remove("FedAuth");
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);

Respuestas a la pregunta(10)

Su respuesta a la pregunta