У меня есть крупное корпоративное приложение, содержащее страницы 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 , но я не ищу того же решения - я не хочу просто удалять аутентификацию WebForms и добавление нового пользовательского кода в глобальном масштабе, есть большой риск и работа. Я хочу изменить только один каталог в конфигурации.
Обновление
Я хочу настроить одно веб-приложение, и в нем я хочу, чтобы все страницы WebForms и представления MVC использовали аутентификацию WebForms. Я хочу, чтобы в одном каталоге использовалась базовая аутентификация HTTP.
Обратите внимание, что я говорю об аутентификации, а не об авторизации. Я хочу, чтобы вызовы REST приходили с именем пользователя и паролем в заголовке HTTP, и я хочу, чтобы страницы WebForm и MVC приходили с файлом cookie аутентификации из .Net - в любом случае авторизация выполняется для нашей БД.
Я не хочу переписывать аутентификацию WebForms и катить свои собственные куки - кажется нелепым, что это единственный способ добавить авторизованную HTTP-службу REST в приложение.
Я не могу добавить дополнительное приложение или виртуальный каталог - оно должно быть как одно приложение.