Possiedo un sito che fa parte del nostro STS personalizzato basato su WIF. Recentemente abbiamo implementato una Security Token Cache come descritto qui: Azure/web-farm ready SecurityTokenCache. La principale differenza tra la nostra implementazione e quella descritta in questo link è che utilizziamo Caching di AppFabric di Azure come backing-store per la cache duratura, anziché per la memorizzazione delle tabelle. Ciò ci ha aiutato ad alleviare un problema di troncamento del token su alcuni browser, ma ha introdotto un nuovo problema (vediamo il problema del troncamento principalmente nelle pagine che contengono google analytics + antiforgery cookie oltre al cookie di fedauth). Stiamo ricevendo la seguente eccezione diverse migliaia di volte al giorno:Memoria dei token di sicurezza WIF
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)
Questa eccezione sembra accadere in un loop di reindirizzamento, quindi vedremo centinaia di loro entro un arco di tempo 1-2 minuti.
Non sono riuscito a trovare alcuna informazione utile durante la ricerca dell'eccezione. L'unica pepita che detiene finora qualche speranza è qualcuno che menziona che potrebbe essere correlato all'oggetto memorizzato nella cache che scade prima della sessione.
Non siamo riusciti a riprodurre il problema internamente e sappiamo solo che esiste a causa delle migliaia di voci che riempiono le nostre tabelle Elmah. Qualsiasi aiuto o intuizione sarebbe molto apprezzato.
Abbiamo spinto fuori quello che abbiamo pensato possa contribuire a risolvere il problema (codice qui sotto), ma non ha avuto alcun effetto:
HttpContext.Current.Response.Cookies.Remove("FedAuth");
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);
Abbiamo implementato la sicurezza cache dei token perché la nostra pila di biscotti collettiva è stato il superamento del limite del dominio dimensione di cookie di 4096 byte in alcuni browser (Safari, Opera, ecc.) È stato implementato in risposta a un problema di troncamento dei cookie. Utilizziamo già anche la crittografia dei cookie basata sui certificati. La cache dei token di sicurezza è un "must" per noi e sta avendo l'effetto sperato ma l'implementazione ha creato questa nuova eccezione. Il vero problema con questa eccezione è che getta i nostri utenti in un ciclo di reindirizzamento. – Jeff