Как разрешить анонимному пользователю доступ к какой-либо странице в MVC? - PullRequest
30 голосов
/ 16 марта 2012

Я включил проверку подлинности формы в моем веб-приложении ASP.NET MVC. Я хочу разрешить анонимным пользователям доступ только к некоторым конкретным страницам, включая, например, Register.cshtml. Я смог разрешить доступ к своему CSS-файлу из моего корневого web.config.

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

Теперь я хочу разрешить анонимный доступ к другим страницам, таким как Дом и Регистрация. Кто-нибудь знает, как этого добиться?

Ответы [ 2 ]

48 голосов
/ 16 марта 2012

В MVC вы обычно используете атрибут [Authorize] для управления авторизацией. Контроллеры или отдельные действия, связанные с этим атрибутом, потребуют, чтобы пользователь был авторизован для доступа к ним - все остальные действия будут доступны анонимным пользователям.

Другими словами, подход «черного списка», при котором действия, требующие авторизации, заносятся в черный список для анонимных пользователей, использующих [Authorize] - будут доступны все действия (без атрибута).

Обновление:

В MVC4 введен новый атрибут, а именно атрибут [AllowAnonymous]. Вместе с атрибутом [Authorize] теперь вы можете использовать подход белого списка. Подход «белого списка» достигается путем присвоения всего контроллера атрибуту [Authorize] для принудительной авторизации для всех действий в этом контроллере. Затем вы можете одеть определенные действия, которые не требуют авторизации, с атрибутом [AllowAnonymous], и, таким образом, занести в белый список только эти действия. При таком подходе вы можете быть уверены, что случайно не забудете одеть действие с [Authorize], оставив его доступным для всех, даже если оно не должно.

Ваш код может быть примерно таким:

[Authorize]
public class UserController : Controller {

   [AllowAnonymous]
   public ActionResult LogIn () {
      // This action can be accessed by unauthorized users
   }

   public ActionResult UserDetails () {
      // This action can NOT be accessed by unauthorized users
   }
}
6 голосов
/ 13 декабря 2016

В Web.config у меня была указанная ниже авторизация

<authorization>
    <deny users ="?"/>
</authorization>

, из-за чего

[AllowAnonymous]

не работает правильно, мне пришлось удалить это разрешение моего Web.config,и во всех контроллерах поставить строку

[Authorize]

перед объявлением класса, для корректной работы.

...