Хранение/назначение ролей аутентифицированных пользователей
Я обновляю сайт, чтобы использовать MVC, и ищу лучший способ настроить аутентификацию.
На данный момент у меня работает вход в систему через Active Directory: я валидирую имя пользователя и пароль, а затем устанавливаю Auth cookie.
Как мне сохранить информацию о ролях пользователя во время входа, чтобы мои контроллеры могли видеть эти роли, когда пользователь перемещается по сайту?
[Authorize(Roles = "admin")]
У меня нет проблем с получением списка ролей из Active Directory. Я просто не знаю, куда их поместить, чтобы контроллеры могли их видеть.
3 ответ(ов)
Для тех, кто использует MVC 4 или выше, вам стоит учесть совет Ярослава Валижко при использовании ответа Давида Глена:
«Я протестировал это в ASP.NET MVC 4 и рекомендую использовать метод Application_PostAuthenticateRequest. В противном случае общий принцип будет переопределён.» – Ярослав Валижко, 7 сентября в 16:18
Как уже сказано выше, всё, что вам нужно сделать, — это заменить имя метода Application_AuthenticateRequest на Application_PostAuthenticateRequest, чтобы это сработало. У меня заработало безупречно! Если бы у меня была возможность проголосовать за Ярослава и Давида, я бы это сделал.
Когда вы аутентифицируете пользователя, создайте новый экземпляр GenericPrincipal
. Конструктор принимает массив строк, который представляет роли пользователя. Затем установите HttpContext.Current.User
равным этому общему принципалу и создайте аутентификационный куки — этого должно быть достаточно.
Я бы посоветовал создать собственный провайдер ролей. Вот пример, который может помочь вам с этим:
В этом руководстве вы найдете информацию о том, как реализовать пользовательский провайдер ролей в ASP.NET MVC 3 с использованием инъекции репозитория. Это даст вам гибкость и возможность настроить функциональность под ваши конкретные требования.
ASP.NET MVC - Установка пользовательского IIdentity или IPrincipal
Обнаружено потенциально опасное значение Request.Form, полученное от клиента
Экранирование символа @ в Razor View Engine
Компиляция представлений в ASP.NET MVC
Добавление подпапки в папку "View/Shared" в ASP.Net MVC и вызов представления