Mam stronę, która jest stroną bazującą na niestandardowym STS opartym na WIF. Niedawno zaimplementowaliśmy pamięć podręczną tokenów bezpieczeństwa opisaną tutaj: Azure/web-farm ready SecurityTokenCache. Główna różnica między naszą implementacją a wersją opisaną w tym linku polega na tym, że zamiast przechowywania tabel korzystamy z buforowania aplikacji Azure AppFabric jako magazynu danych trwałej pamięci podręcznej. Pomogło nam to w rozwiązaniu problemu z obcinaniem tokena w niektórych przeglądarkach, ale wprowadziło nowy problem (Problem z obcinaniem pojawia się głównie na stronach, które oprócz plików cookie goangel analytics + antiiforgery oprócz pliku cookie fedauth). Jesteśmy teraz otrzymania następującym wyjątkiem kilka tysięcy razy dziennie:Buforowanie tokenów zabezpieczających 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)
Wyjątek ten wydaje się dzieje w pętli przekierowanie, więc zobaczymy ich setki w przedziale czasowym 1-2 minut.
Nie mogę znaleźć żadnych użytecznych informacji podczas badania wyjątku. Jedynym samorodkiem, który ma jak dotąd nadzieję, jest ktoś, kto wspomniał, że może być powiązany z wygaszonym obiektem wygasającym przed sesją.
Nie byliśmy w stanie odtworzyć problemu wewnętrznie i wiemy tylko, że istnieje z powodu tysięcy wpisów wypełniających nasze tabele Elmah. Każda pomoc lub wgląd byłyby bardzo doceniane.
Mamy wypchnięty co myśleliśmy może pomóc rozwiązać ten problem (kod poniżej), ale to nie miało żadnego wpływu:
HttpContext.Current.Response.Cookies.Remove("FedAuth");
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);
Wdrożyliśmy token cache ponieważ nasz wspólny stos ciasteczek było przekroczenie limitu rozmiaru domeny cookies 4096 bajtów w niektórych przeglądarek (Safari, Opera, itp). Został zaimplementowany w odpowiedzi na problem z obcinaniem plików cookie. Korzystamy również z szyfrowania plików cookie na podstawie certyfikatu. Pamięć podręczna tokenów bezpieczeństwa jest dla nas "koniecznością" i ma taki efekt, na jaki liczyliśmy, ale implementacja stworzyła ten nowy wyjątek. Prawdziwy problem z tym wyjątkiem polega na tym, że rzuca on naszych użytkowników w pętlę przekierowania. – Jeff