Как реализовать кастомную аутентификацию и авторизацию в ASP.NET MVC 5?

Здравствуйте.

Долгое время использую систему авторизации от MS (ASP.NET Identity 2.0), гуру ASP.NET MVC отзываются о нем очень плохо, да и я сам за долго время нашел свои косяки:

1. Очень сильная привязка к SQL-Server — сложно поменять базу. И на данный момент система обновляется каждые два месяца, что приходится переписывать чужие имплементации под новые, особенно NoSQL.
2. Не позволяет добавлять в коллекцию свои атрибуты (Claims не считается).
3. Не проверяет доступ при запросе, т.е. проверка идет только по выданным кукисам и их дате. Если я залогинюсь с двух браузеров, и во втором браузере поменяю пароль, то сессия в первом браузере остается валидной — юзер может спокойно листать защищенные страницы сайта, пока не пройдет N-ое время. А вот вариант ставить коротко время проверки имеет свои недостатки, явный из них: иногда приходиться нажимать Logout несколько раз, чтобы заработало. :D

Сам я видел только 1 проект закрытый от опытного разработчика (он проверяет через Application_BeginRequest) и несколько статей в сети (через BaseController и IPrincipal). И в каждом мне что-то не хватает, да и какой из них лучше использовать?

Гуру ASP.NET MVC, пожалуйста, поделитесь с своими реализациями аутентификации и авторизации, или же дайте наводку на самую лучшую, по Вашему мнению, статью, где описывается хорошая и гибкая система авторизации. Желательно под MVC 5.

Спасибо.
  • Вопрос задан
  • 5102 просмотра
Пригласить эксперта
Ответы на вопрос 2
@asdz
Что подразумеваете под
Не позволяет добавлять в коллекцию свои атрибуты
- что за коллекцию вы имеете ввиду?
и
Не проверяет доступ при запросе
? А еще хотелось бы услышать от отвечающих что именно плохо сделано в Identity? Лично мне непонятно зачем в IdentityUser 2.0
public class IdentityUser : IUser
{
...
public virtual ICollection<IdentityUserRole> Roles { get; }
...
}
<code>
роли пользователя представлены не в виде коллекции ролей, а в виде связывающих сущностей 
<code>
public class IdentityUserRole<TKey> 
{
    public IdentityUserRole();
    public virtual TKey RoleId { get; set; }
    public virtual TKey UserId { get; set; }
}
<code>
Ответ написан
@alexqq
Попробуйте использовать универсальные провайдеры, добавив Micrrosoft.AspNet.Providers...Как по мне он более удобен и прост в переопределении... Так же недолюбливаю Identity... Немножко перемудрили.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы