Кэширование токена безопасности WIF

У меня есть сайт, который является проверяющей стороной нашей пользовательской STS на основе WIF. Недавно мы внедрили кэш токенов безопасности, как описано здесь: Готовность Azure/веб-фермы SecurityTokenCache.Основное различие между нашей реализацией и реализацией, описанной в этой ссылке, заключается в том, что мы используем кэширование Azure AppFabric в качестве резервного хранилища для надежного кэша, а не для хранения таблиц. Это помогло избавить нас от проблемы усечения токена в некоторых браузерах, но создало новую проблему (мы видим проблему усечения в первую очередь на страницах, на которых в дополнение к файлу cookie fedauth есть файлы cookie аналитики Google и защиты от подделки). Теперь мы получаем следующее исключение несколько тысяч раз в день:

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);

12
задан Community 23 May 2017 в 12:25
поделиться