我有一個網站是我們基於WIF的自定義STS的依賴方。我們最近實現了一個安全令牌緩存,如下所述:Azure/web-farm ready SecurityTokenCache。我們的實現和該鏈接中描述的實現之間的主要區別在於,我們使用Azure AppFabric緩存作爲持久緩存的後備存儲,而不是表存儲。這有助於緩解我們在某些瀏覽器上出現令牌截斷問題,但卻引入了一個新問題(我們看到截斷問題主要出現在除了fedauth cookie之外還包含Google Analytics(分析)+ antiforgery cookie的頁面上)。我們現在會收到以下異常數千次,每天: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)
此異常似乎重定向循環要發生的事情,所以我們一個1-2分鐘的時間跨度內看到數百人。
在研究異常時,我一直無法找到任何有用的信息。迄今爲止唯一的希望是有人提到它可能與會話之前到期的緩存對象有關。
我們無法在內部重現問題,只知道它存在是因爲成千上萬的條目填滿了我們的Elmah表。任何幫助或見解將非常感激。
我們推出了我們認爲可能有助於解決這個問題(下面的代碼),但它沒有任何效果:
HttpContext.Current.Response.Cookies.Remove("FedAuth");
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);
我們所實現的安全令牌緩存,因爲我們的cookies的集體棧是超過某些瀏覽器(Safari瀏覽器,Opera等)的4096個字節的域cookie大小限制。它是爲了響應cookie截斷問題而實現的。我們也已經使用基於證書的cookie加密。安全令牌緩存對我們來說是「必須的」,並且具有我們希望的效果,但是實現已經創建了這個新的例外。這個異常的真正問題是它將我們的用戶引入重定向循環。 – Jeff 2012-03-28 15:59:09