Фильтры аутентификации MVC5

В чем разница между новой аутентификацией и предыдущими фильтрами авторизации? Я не вижу никакой разницы. Я всегда использовал: [Authorize(Roles = "Admin, User")]

Когда вы хотите использовать фильтр аутентификации? и когда использовать Авторизацию?

Может кто-нибудь объяснить разницу? Образцы были бы отличными. Благодарность


person ShaneKm    schedule 08.11.2013    source источник


Ответы (3)


Вы можете найти статью здесь:

Я также создал аналогичный пост здесь:

Хотя ответ, который я получил, был отличным, чтобы прояснить несколько вещей, но я все еще немного запутался в том, как его использовать, но больше в ожидаемом поведении (как вы увидите, если прочитаете мой пост).

Короче говоря, новые фильтры Authentication срабатывают раньше, чем старые фильтры Authorization.

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

Если ответ отрицательный, то пользователь НЕ аутентифицирован, что, в свою очередь, должно вернуть код состояния http 401 Unauthorized.


Что касается Authorization, опять же, насколько я понимаю, пользователь неявно аутентифицирован, и он может быть Authorized или не иметь доступа к определенной странице или ресурсу. Если это так, то я должен вернуть код статуса http 403 Forbidden. И здесь в игру вступает атрибут [Authorize].


Хотя это то, что я понимаю, поведение обоих этих фильтров не работает так, как я думаю, что они будут работать. Возможно, это связано с моим непониманием...

Например: кажется, что новый фильтр Authentication не распознает (или не принимает во внимание) атрибут [AllowAnonymous]. И, как я это вижу, так и должно быть.

С другой стороны, старый атрибут [Authorize] распознает (и учитывает) атрибут [AllowAnonymous].

В конце концов, я не уверен, поможет ли это вам или еще больше запутает, но я все еще нахожусь в процессе игры с ними, чтобы полностью понять это.

person Vlince    schedule 08.11.2013
comment
AllowAnonymous — это авторизация, которая происходит после аутентификации, поэтому Authentication, естественно, ее не распознает. Аутентификация предшествует ей в конвейере. - person crush; 19.06.2015

Ну, основное различие между авторизацией и аутентификацией заключается в том, что авторизация — это процесс проверки того, что вы «авторизованы» что-то делать или получать доступ к чему-то. А аутентификация — это прежде всего проверка того, кем вы являетесь, или проверка того, что вы действительно тот, за кого себя выдаете (то есть, что вы «подлинны»).

Авторизация обычно выполняется путем просмотра ваших пользовательских ролей (связанных с вашей личностью) и того, удовлетворяют ли какие-либо из них доступной функциональности. Аутентификация обычно выполняется путем проверки того, что ваш пароль совпадает с сохраненным (в идеале в зашифрованном виде) с вашим именем пользователя. Например. что ваши учетные данные верны. Это, конечно, основано на предположении, что ваш пароль является секретным, поэтому только вы знаете свой пароль.

Однако также возможны расширенные сценарии аутентификации, например, сервер Facebook, говорящий, что вы действительно являетесь человеком с данным именем пользователя (поскольку вы вошли в систему с ним ранее). Механизм, известный как единый вход (SSO). Именно эти различные сценарии могут быть реализованы с помощью (возможно, настраиваемых) фильтров аутентификации.

Пока я дал только некоторые определения. Но подведем итог; в принципе Аутентификация НЕ будет смотреть на ваши роли пользователей, в то время как Авторизация будет ТОЛЬКО смотреть на ваши роли пользователей. Также обратите внимание, что авторизация может иметь место только после аутентификации. Вот почему фильтры аутентификации имеют приоритет над фильтрами авторизации. И это также показывает, что вы можете использовать оба атрибута в одном и том же методе, поэтому обычно нет выбора между аутентификацией ИЛИ авторизацией, но вы можете использовать оба!

Простой атрибут [Authorized] без какого-либо указанного атрибута Roles=, вероятно, больше всего сбивает с толку, так как он просто проверяет, что вы вошли в систему, например. аутентифицированы. Так что это можно рассматривать как аутентификацию. Но аутентификация на самом деле уже произошла до этого. Фильтры аутентификации теперь добавляются только для MVC5, потому что раньше аутентификация почти всегда выполнялась с помощью одного метода: файла cookie аутентификации ASP.NET, который вы получаете после входа в систему (членство). Теперь, когда oAuth и другие методы входа в систему SSO стали настолько популярными фильтры предоставляют крючки для более легкой реализации альтернатив. Например: «установите файл cookie авторизации, если Facebook разрешает» :).

person Bart    schedule 05.02.2014

До MVC 5 аутентификация выполнялась через атрибут авторизации. Теперь они разделены в MVC 5. Фильтр аутентификации выполняется до фильтра авторизации. Можно написать собственный фильтр проверки подлинности, создав новый фильтр из проверки подлинности и фильтра действия. Затем при необходимости можно изменить принципала пользователя в запросе. например для выполнения того или иного действия может понадобиться другой руководитель, в то время это очень удобно.

person Avijit    schedule 16.04.2014