У меня есть пользовательский принцип/идентификатор для моего веб-приложения ASP.NET MVC4. Я также создал AuthorizeAttribute, чтобы создать экземпляр моего настраиваемого принципала, назначив его httpContext.User в контроллерах, где мне требуется аутентификация.
Это отлично работает для контроллеров/действий, которые были украшены моим AuthorizeAttribute, однако для контроллеров, которые не требуют аутентификации (но все равно используют его, если он есть), я хотел бы получить свой CustomPrincipal ( и предпочтительно через HttpContext.User).
В этих не оформленных контроллерах/действиях установлен HttpContext.User, но с GenericPrincipal, а не с моим CustomPrincipal. Где лучше всего "переопределить" значение по умолчанию для HttpContext.User для GenericPrincipal?
Кроме того, если это делается в каждом запросе с файлом auth, , как бы я тогда не выполнял работу дважды в случае декорированного контроллера AuthorizeAttribute (который тогда просто стал бы одним эта мандатная аутентификация).
Чтобы быть ясным, мой сайт позволяет анонимным пользователям получать доступ, но на этих страницах, если один из них аутентифицирован (и реализуется CustomPrincipal), есть дополнительные функции.
Я думаю, что некоторые из вариантов (не определенные моей логикой позади каждого):
- используйте сеанс (и обрабатывайте логику, чтобы создать то, что мне нужно здесь, забыв о Принципах).
- Application_AuthenticateRequest - увиденные комментарии в Интернете, что это старая школа.
- Пользовательские фильтры, установленные на базовом контроллере
- Создайте атрибут AuthorizationAttribute на базовом контроллере, который позволяет всем и настраивает HttpContext.User, как я хочу.
- IHttpModule - это похоже на спуск (и продвигается по этому пути, если другие не согласны).
Мысли?