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

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

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

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

Ответы [ 2 ]

16 голосов
/ 30 марта 2011

В 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 .
0 голосов
/ 31 марта 2010

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

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

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

<allow users="?"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...