Используется ли атрибут Authorize в ASP .NET MVC для аутентификации и авторизации? - PullRequest
19 голосов
/ 09 июня 2009

Я читаю на ASP .NET MVC и только что попал в раздел, рассказывающий об атрибуте Authorize. Это говорит о том, что атрибут Authorize используется для проверки того, что пользователь аутентифицирован на контроллере. Это правда? Я знаю, что этот атрибут предназначен для использования в целях авторизации, но лучше ли использовать этот атрибут для аутентификации?

Если нет, то как лучше всего проверять (не выполняет) аутентификацию?

Если так, то почему это так? Я что-то упустил?

Ответы [ 3 ]

27 голосов
/ 09 июня 2009
Атрибут

Authorize может использоваться для проверки того, зарегистрирован ли пользователь. Он также может использоваться для проверки того, является ли пользователь участником определенной роли и имеет ли конкретное имя.

По сути, это то же самое, что обрабатывается секцией <authorization> в web.config при использовании веб-форм.

Не указывается метод аутентификации. Он обрабатывается разделом <authentication> в web.config точно так же, как веб-формы.

РЕДАКТИРОВАТЬ (пояснение об аутентификации и авторизации):

Аутентификация - Проверка личности . То есть вы проверяете, кто является пользователем. Это может быть выполнено путем проверки имени пользователя и пароля, проверки вашего токена аутентификации Windows, сканирования сетчатки, голосовой идентификации или чего-либо еще.

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

По сути, пустой атрибут [Authorize] выполняет авторизацию, а не аутентификацию. Это не проверяет, кто вы есть. Он просто проверяет, имеет ли тот, кем вы подтвердили, доступ к ресурсу или нет. Тем не менее, его критерием авторизации является «кто-нибудь успешно аутентифицирован». Вы можете указать другие критерии. Так что, действительно, он делает авторизацию, а не аутентификацию.

5 голосов
/ 09 июня 2009

Authorize действительно проверяет, что пользователь прошел проверку подлинности, в противном случае он не сможет определить роли для пользователя или того, каким пользователем (кроме анонимного) является текущий пользователь. То есть, для того, чтобы авторизоваться, если анонимный доступ не разрешен, вы должны сначала пройти аутентификацию. Ниже приведен соответствующий фрагмент метода AuthorizeCore в RTM-версии (от http://www.codeplex.com/aspnet).

// This method must be thread-safe since it is called by the thread-safe OnCacheAuthorization() method.
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
    if (httpContext == null) {
        throw new ArgumentNullException("httpContext");
    }

    IPrincipal user = httpContext.User;
    if (!user.Identity.IsAuthenticated) {
        return false;
    }

    ...

Если AuthorizeCore возвращает false в OnAuthorization, то для AuthorizationContext.Result устанавливается новый HttpUnauthorizedResult, что приведет к перенаправлению пользователя на страницу входа (в FormsAuthentication) или к ошибке.

РЕДАКТИРОВАТЬ : Прочитав ваши комментарии к другим ответам, я бы сказал, что вы упускаете суть. Технически это только делает авторизацию. Минимальный уровень авторизации - это то, что для выполнения действия вам необходимо пройти аутентификацию. Вы получите это, не указав пользователей или роли для атрибута Authorize. Любой пользователь или роль разрешены, если они аутентифицированы. Указывая пользователей и / или роли, которые действуют как фильтры, вы сужаете область действия, и пользователь должен не только проходить проверку подлинности (чтобы вы могли проверить членство в имени / роли), но также проходить проверку на основе фильтра.

3 голосов
/ 09 июня 2009

Аутентификация и авторизация - это две разные проблемы.

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

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

Поскольку мы можем получить роли человека только после входа в систему, можно использовать атрибут Authorize для проверки подлинности.

Взгляните на этот пост в блоге и узнайте, как автор реализует пользовательский атрибут Authorize и Authentication:

Защита действий вашего контроллера

Вы увидите, что атрибут Authorize должен проверять аутентификацию, поскольку роль могут иметь только аутентифицированные пользователи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...