моя проблема в том, что с ASP.NET MVC
Application_AuthenticateRequest
кажется срабатывает всякий раз, когда любой запрос
сделано (так для файлов JS, изображений и т. д.)
что приводит к смерти приложения.
Это не единственная проблема MVC - если вы запустите приложение на IIS7 с интегрированным конвейером, вы увидите то же самое.
Если проблема с поиском связана с масштабируемостью, то я предполагаю, что настоящая проблема находится в пределах
FormsAuthenticationTicket ticket = id.Ticket;
SiteUser siteUser = new SiteUser(Convert.ToInt32(id.Name));
Я предполагаю, что ваш класс SiteUser выполняет поиск в базе данных. Если вы посмотрите, как работает форма auth, заявка содержит всю информацию, необходимую для создания FormsIdentity (это не относится к ролям, если вы специально не включили кэширование ролей в куки). Таким образом, вы должны смотреть на тот же подход. В первый раз, когда вы создаете свой объект siteUser, кэшируете его в подписанном файле cookie, а затем используете файл cookie для повторного увлажнения свойств SiteUser при последующих запросах.
Если вы сделаете это, то сможете пойти еще дальше, заменив принцип Thread вашим SiteUser или, по крайней мере, пользовательскую комбинацию IPrincipal / IUser, содержащую ту же информацию, что и ваш класс SiteUser.
Так что внутри AuthenticateRequest у вас будет поток вроде
SiteUserSecurityToken sessionToken = null;
if (TryReadSiteUserSecurityToken(ref sessionToken) && sessionToken != null)
{
// Call functions to attach my principal.
}
else
{
if (HttpContext.Current.User != null &&
HttpContext.Current.User.Identity.IsAuthenticated &&
HttpContext.Current.User.Identity is FormsIdentity)
{
// Get my SiteUser object
// Create SiteUserSecurityToken
// Call functions to attach my principal.
}
}
И функция для присоединения принципала будет содержать что-то вроде
HttpContext.Current.User = sessionSecurityToken.ClaimsPrincipal;
Thread.CurrentPrincipal = sessionSecurityToken.ClaimsPrincipal;
this.ContextSessionSecurityToken = sessionSecurityToken;
Вы хотите убедиться, что функции, которые записывают токен безопасности в файл cookie, добавляют, как минимум, значение контрольной суммы / MAC и, если хотите, поддерживают шифрование с использованием ключа компьютера, если он настроен на выполнение. так. Функции чтения должны проверять эти значения.