ASP.NET MVC - установить пользовательский IIdentity или IPrincipal

Мне нужно сделать что-то довольно простое: в моем приложении ASP.NET MVC я хочу установить пользовательский IIdentity / IPrincipal. Что проще / больше подходит. Я хочу расширить значение по умолчанию, чтобы я мог вызвать что-то вродеUser.Identity.Id а такжеUser.Identity.Role, Ничего особенного, только некоторые дополнительные свойства.

Я прочитал тонны статей и вопросов, но чувствую, что усложняю, чем на самом деле. Я думал, что это будет легко. Если пользователь входит в систему, я хочу установить свой IIdentity. Вот я и подумал, буду реализовыватьApplication_PostAuthenticateRequest в моем global.asax. Однако это вызывается при каждом запросе, и я не хочу выполнять вызов базы данных при каждом запросе, который запрашивал бы все данные из базы данных и помещал бы в пользовательский объект IPrincipal. Это также кажется очень ненужным, медленным и не в том месте (делая там вызовы из базы данных), но я могу ошибаться. Или откуда еще эти данные?

Поэтому я подумал, что всякий раз, когда пользователь входит в систему, я могу добавить в сеанс некоторые необходимые переменные, которые я добавляю в пользовательский IIdentity вApplication_PostAuthenticateRequest обработчик события. Тем не менее, мойContext.Session являетсяnull там, так что это тоже не путь.

Я работаю над этим уже целый день и чувствую, что что-то упустил. Это не должно быть слишком сложно, верно? Я также немного смущен всеми (полу) связанными вещами, которые идут с этим.MembershipProvider, MembershipUser, RoleProvider, ProfileProvider, IPrincipal, IIdentity, FormsAuthentication.... Я единственный, кто находит все это очень запутанным?

Если бы кто-то мог сказать мне простое, элегантное и эффективное решение для хранения некоторых дополнительных данных на IIdentity без всего лишнего запаха ... это было бы здорово! Я знаю, что есть аналогичные вопросы по SO, но если ответ на этот вопрос мне нужен, я должен пропустить.

Ответы на вопрос(9)

Ваш ответ на вопрос