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

У меня есть приложение ASP.Net MVC, использующее встроенную защиту, которое мне нужно, чтобы иметь возможность предоставить открытый доступ к определенному маршруту. Рассматриваемый маршрут ~/Agreements/Upload, Я попробовал несколько вещей, и пока ничего не получалось.

<configuration> 
  <location path="~/Agreements/Upload">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration> 

В IIS в разделе "Безопасность каталога"> "Методы проверки подлинности" у меня выбрана только "Встроенная проверка подлинности Windows". Теперь, это может быть частью моей проблемы (хотя IIS разрешает вышеупомянутый IIS не делает). Но если это так, как мне настроить его так, чтобы встроенная безопасность работала, но позволяла людям, которые не прошли проверку подлинности, получить доступ к данному маршруту?

2 ответа

В ASP.NET MVC не следует использовать элемент location в web.config. В то время как механизм веб-форм сопоставлен с физическими файлами на диске, механизм MVC использует маршрутизацию. Это означает, что вы можете случайно случайно разрешить доступ к "защищенному контроллеру" через пользовательский маршрут.

Рекомендуемый способ защиты приложений ASP.NET MVC - использование атрибута Authorize, как показано в следующем примере:

public class HomeController : Controller
{
    [Authorize]
    public ActionResult Index()
    { 
        return View();
    }
}

Действие контроллера - это то, что вы хотите защитить, а не маршрут. Леви Бродерик, специалист по безопасности ASP.NET MVC, довольно открыто высказывается по этому вопросу:

  1. Исключение действия из авторизации в ASP.NET MVC 2
  2. Проблема с авторизацией с IIS и MVC.

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

<deny users="?"/>
<allow users="*"/>

В вашем <location> раздел, разрешить анонимным пользователям.

<allow users="?"/>
Другие вопросы по тегам