У меня есть большое корпоративное приложение, содержащее как WebForms, так и страницы MVC. Он имеет существующие настройки аутентификации и авторизации, которые я не хочу изменять.
Аутентификация WebForms настраивается в файле web.config:
<authentication mode="Forms">
<forms blah... blah... blah />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Довольно стандартно. У меня есть служба REST, которая является частью этого большого приложения, и я хочу использовать HTTP-аутентификацию вместо этой одной службы.
Итак, когда пользователь пытается получить данные JSON из службы REST, он возвращает статус HTTP 401 и заголовок WWW-Authenticate
. Если они отвечают правильно сформированным ответом HTTP Authorization
, он позволяет им.
Проблема в том, что WebForms переопределяет это на низком уровне - если вы вернетесь 401 (неавторизованный), он переопределяет это с 302 (перенаправление на страницу входа). Это хорошо в браузере, но бесполезно для службы REST.
Я хочу отключить параметр проверки подлинности в файле web.config, переопределив папку "rest":
<location path="rest">
<system.web>
<authentication mode="None" />
<authorization><allow users="?" /></authorization>
</system.web>
</location>
Бит авторизации работает нормально, но строка аутентификации (<authentication mode="None" />
) вызывает исключение:
Ошибка использования раздела, зарегистрированного как allowDefinition = 'MachineToApplication', превышающего уровень приложения.
Я настраиваю это на уровне приложения, хотя это - в корневой web.config - и эта ошибка для web.configs в подкаталогах.
Как переопределить аутентификацию, чтобы весь остальной сайт использовал аутентификацию WebForms, и этот один каталог не использует?
Это похоже на другой вопрос: 401 код ответа для json-запросов с ASP.NET MVC, но я не ищу того же решения - t хотите просто удалить аутентификацию WebForms и добавить новый настраиваемый код по всему миру, что может привести к большому риску и работе. Я хочу изменить только один каталог в конфигурации.
Обновление
Я хочу настроить одно веб-приложение и хочу, чтобы все страницы WebForms и MVC отображали аутентификацию WebForms. Я хочу, чтобы один каталог использовал базовую HTTP-аутентификацию.
Обратите внимание, что я говорю об аутентификации, а не о авторизации. Я хочу, чтобы звонки REST приходили с именем пользователя и паролем в HTTP-заголовке, и я хочу, чтобы страницы WebForm и MVC поставлялись с файлом cookie аутентификации .Net - в любом случае авторизация выполняется в отношении нашей БД.
Я не хочу переписывать аутентификацию WebForms и откатывать свои собственные файлы cookie. Кажется, это смешно, что это единственный способ добавить HTTP-службу REST в приложение.
Я не могу добавить дополнительное приложение или виртуальный каталог - это должно быть как одно приложение.