Я прочитал много вопросов и ответов по этой теме, но ни один из них не помог мне решить эту проблему.Пользовательский IPrincipal не доступен в MVC5
Проблема, с которой я сталкиваюсь, заключается в том, что HttpContext.Current.User
или просто User
объект имеет тип RolePrincipal
вместо моего основного принципала.
Это веб-приложение MVC 5, использующее проверку подлинности Windows (приложение только для интрасети). Мой пользовательский принцип является подклассом WindowsPrincipal
, и я реализовал свой собственный RoleProvider
для использования в тегах атрибутов Authorize.
Когда я пытаюсь использовать принципала, отбрасывая его на мой пользовательский принцип от IPrincipal
в текущем HttpContext, я получаю сообщение об ошибке, указывающее, что это тип RolePrincipal, который, очевидно, не может быть отнесен к моей учетной записи. Я настраиваю свой собственный принципала в Application_PostAuthenticationRequest
событии:
protected void Application_PostAuthenticationRequest(object sender, EventArgs e)
{
if (User == null)
return;
using(EntityContext db = new EntityContext())
{
var user = db.Users.SingleOrDefault(u => u.ADName.Equals(User.Identity.Name));
HttpContext.Current.User = new PcsPrincipal((WindowsIdentity)User.Identity, user);
}
}
Когда я поставил точку останова в этом методе появляется никогда не дозвонились, что может объяснить, почему он не получает установлен в мой пользовательском принципал.
Я рассмотрел следующие КвА, но они не были в состоянии решить эту проблему:
- using custom IPrincipal and IIdentity in MVC3 - Добавлена регистрация обработчика событий в методе Init Global.asax.cs в. Кажется, ничего не изменилось. Также переменная
_application
оказалась недействительной в MVC5. - RoleProvider dosn't work with custom IIdentity and IPrincipal on server - Внесены изменения в файл web.config, но это вызвало различные ошибки во время выполнения с ошибками, указав, что конвейер ASP.NET настроен неправильно.
Что я делаю неправильно, чтобы не иметь Основной набор? Дайте мне знать, нужно ли размещать больше кода.
EDIT: Настройка HttpContext.Current.User для моего пользовательского принципала в событии WindowsAuthentication.OnAuthenticate не разрешает эту проблему. Точно такое же поведение проявляется с использованием этого метода.
Такое же поведение проявляется при использовании события WindowsAuthentication.OnAuthenticate. – JNYRanger