2011-01-04 4 views
1

У меня есть устаревший веб-сайт ASP.Net, в который я интегрирую MVC. Я использую проверку подлинности WebForms со стандартным тегом авторизации в web.config:Разрешить публичный доступ к действию контроллера в WebForms + сайт MVC

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

я был в состоянии сделать различные папки общественности в прошлом с помощью таких местах, как:

<location path="Public"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 

с дополнительным из MVC и несколько контроллеров у меня есть необходимость сделать несколько действий контроллера полностью общедоступными. Однако я не могу это сделать, используя тег location в web.config. Если я попытаюсь перейти на URL-адрес действия, пока не аутентифицирован, ASP.Net перенаправляет меня обратно на мою страницу входа (указанную в web.config). Я не использую атрибут авторизации для любого из этих действий контроллера.

Как открыть доступ к ним при нарушении безопасности для всех веб-форм, которые нуждаются в защите?

Edit:

Я хочу ясно дать понять, что я использую [Авторизовать] на действия я хочу защищаемых. Действия в вопросах, которые я хочу обнародованные, не используя [Авторизовать] атрибут и все еще не доступны, если не вошли в систему

Edit 2:.

Я сделал некоторые следы IIS и думаю, что я убежден, что это действительно ошибка аутентификации, а не какая-то другая ошибка. Вот пример местоположения и маршрута я пытаюсь получить доступ к:

<location path="WC"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

И маршрут:

routes.MapRoute(
      "WC", // Route name 
      "WC/{id}", 
      new { action = "GetWC", controller = "WC" } // URL with parameters 
     ); 

И в URL, который не удается:

http://localhost/MyWebApp/WC/42 

я на самом деле более общий маршрут, который обрабатывает это, но добавил это, чтобы устранить любые сомнения. В любом случае это нормально работает при входе в систему.

+0

Можете ли вы привести пример элементов и маршрутов местоположения, которые вы пытаетесь? Несоответствие между ними кажется наиболее вероятной причиной. –

ответ

0

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

0

Используйте System.Web.Mvc.AuthorizeAttribute. Вы можете сами украсить или сам класс контроллера (что приведет к защите всех методов действий), или вы можете украсить сам метод действий для более тонкого управления зерном.

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

+0

Это в основном то, что я сделал, и его не работает. –

+0

Тогда есть что-то еще, вызывающее вашу проблему. По умолчанию действия являются общедоступными; пока вы не украсите его (или его класс) авторизованным, чтобы они стали защищенными. Вам может потребоваться опубликовать различные разделы вашего web.config, чтобы помочь вам получить ответ (элемент аутентификации, возможно, любые элементы авторизации, которые у вас есть). –

+0

Изучив весь этот день, я нашел заявления, противоречащие этому. Насколько я понимаю, OOB-сайт MVC широко открыт, но сайт WebForms - нет. Похоже, что разница в конфигурации авторизации в web.config. Я полностью смущен этим, так как многие люди говорят то, что противоречит друг другу, в том числе MVP на форумах MS. –

Смежные вопросы