ASP.NET MVC кэширует информацию о пользователе (принципал)

#c# #asp.net #asp.net-mvc #authorization #.net-4.5

Вопрос:

У меня есть старший ASP.NET Приложение MVC, работающее на платформе .NET Framework 4.5.2, которое использует проверку подлинности Windows (это интрасеть) для пользователей, а затем пользовательский принципал, который хранит данные пользователя (разрешения пользователя, некоторые другие метаданные, которые часто необходимы).

Мне нужно «кэшировать» эти данные и не перезагружать их при каждом запросе, потому что процесс их получения из нескольких источников является дорогостоящим и трудоемким.

Допустим, например, что достаточно перезаряжать их каждый час.

Каковы мои варианты правильного сохранения пользовательских данных (пользовательского участника)?

Как это делается сейчас, мы используем решение, которое мне не нравится, но я не могу придумать/найти лучшее.

  1. Мы реализуем WindowsAuthentication_OnAuthenticate в global.asax.cs
    • если нет действительного файла cookie авторизации, мы пытаемся создать его с помощью:
      • мы загружаем информацию о пользователе и создаем наш CustomPrincipal
      • сериализуйте его и сохраните в FormAuthenticationTicket
      • это затем шифруется и хранится в HttpCookie
  2. Затем файл cookie извлекается при реализации Application_PostAuthenticateRequest в global.asax.cs
    • принципал десериализуется и устанавливается в качестве принципала в HttpContext.Current.User случае наличия файла cookie

Я попытался погуглить, но я не знаю, как правильно спросить, и не могу получить результаты, которые я ищу. Любая информация о предпочтительных способах решения этой проблемы приветствуется.