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

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

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

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

Ответ 1

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

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

Update:

С 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
   }
}

Ответ 2

В Web.config у меня была следующая авторизация

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

это вызывает

[AllowAnonymous]

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

[Authorize]

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