2012-05-22 4 views
2

Я пытаюсь смешать некоторые функции MVC3 в существующем приложении WebForms. Я следил за несколькими гидами, и все было создано и работало, за исключением части авторизации. В существующем приложении есть <deny users="*" />, который находится у корневого web.config, и каждая подпапка имеет свой собственный web.config, который позволяет доступ к страницам внутри определенных ролей.Смешивание ASP.NET WebForms и авторизация MVC

Мое новое понимание заключается в том, что этот стиль не может/не должен использоваться на контроллерах, и вместо этого я должен использовать атрибуты Authorize. Я украсил мой тест «HomeController» с [Authorize(Roles="AdminRole")], но при попытке просмотра страницы я получаю страницу «Отказано в доступе».

Если я изменил корневой web.config, скажу <allow users="*" />, страница работает. Означает ли это, что атрибут, который я добавил в контроллер, работает, но параметр root web.config имеет приоритет над ним? Я не хочу связываться с существующим материалом авторизации, так как сайт хорошо установлен, и я просто пытаюсь добавить MVC для игры. Я что-то упускаю? Спасибо за любую информацию, которую вы можете предоставить.

+0

Видимо, это плохая идея - http://blogs.msdn.com/b/rickandy/archive/2010/08/24/securing-your-mvc-application.aspx –

ответ

1

А это немного сложно, поскольку вы пытаетесь использовать защиту MVC в приложении, уже использующем веб-формы. Если это было чисто mvc, выбор прост. Если вы не можете вытащить функции mvc в отдельное приложение, это оставляет вам немного рассола.

Моей первой рекомендацией было бы попытаться извлечь код. Если вы используете MVC только для обеспечения спокойных функций, можете также проверить MVC4 web api, чтобы предоставить api для вашего приложения и поделиться компонентами, которые используются между ними, что потребовало бы вытащить их из вашего веб-приложения в библиотеку домена или другое подходящее имя библиотека.

С учетом этого не на 100% уверены, что разрешить пользователям = "*" работать должным образом, но я считаю, что это так. Его достаточно легко проверить, просто измените Roles = "AdminRole" на Roles = "placeholder" и повторите попытку.

Установка этого, хотя и убивает остальную часть вашего auth, поэтому одной идеей может быть размещение всех маршрутов mvc под определенным URL-адресом, например «/ api /», и разрешить * в файле web.config на этот путь, а затем использовать mvc безопасность всех ваших методов управления. Это повлияет на ваше основное веб-приложение.

+0

Хм ... когда я переключаюсь на ' Роли = «заполнитель», я не получаю страницу «Отказано в доступе», я просто получаю пустой ответ с кодом 401 (что имеет смысл). Я думаю, ваше предложение будет работать, но не интегрируется так хорошо, как я надеялся. Отправляясь, чтобы оставить это открытым для бит, прежде чем маркировать, как разрешено, если есть другие способы сделать это. – Ocelot20

+0

Адам - ​​есть ли какие-нибудь новые рекомендации по этому поводу? Я использую MVC5 с WebForms, работающими в этой же точной ситуации - http://stackoverflow.com/questions/27785561/configuring-authorization-in-a-mixed-mvc-webforms-web-app – SB2055

+0

@ SB2055 Мое руководство будет для обновления до Identity выполните следующие действия для веб-форм: http://www.asp.net/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/membership-and-administration и mvc продолжает использовать атрибуты. Хотя я не пытался их смешивать лично, я не могу понять, почему это не сработает. Он использует ту же систему. Я использую Identity здесь: http://www.microsoftvirtualacademy.com/training-courses/customizing-asp-net-authentication-with-identity –

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