Разный режим аутентификации для разных областей

У меня есть две части веб-сайта, над которым я работаю: одна использует проверку подлинности с помощью обычных форм, а другая использует проверку подлинности на основе HMAC. Основанный на формах работает как обычно (за исключением использования настраиваемого поставщика членства).

Больше всего расстраивает то, что по умолчанию, если кто-то решает использовать аутентификацию с помощью форм, он перенаправляет все ответы 401 на loginUrl, указанный в корневом Web.config под тегом аутентификации. Чтобы отключить это для части HMAC моего сайта, я создал отдельную область, в которой находятся эти контроллеры. Web.config, который я поместил в папку области или под тегом местоположения в корневом файле Web.config (это на самом деле вызывает ошибку о том, что этот тег не принадлежит ему)) Кажется, я не могу заставить эту штуку прекратить перенаправление всех 401-х на логинURL.

Любая помощь будет принята с благодарностью, так как это заставляет меня рвать на себе волосы.

Кстати, этот вопрос задавался по-разному, по крайней мере, 2 times без (жизнеспособных) ответов. В то время как мой фокусируется на установке режима аутентификации None, их обычно сосредоточены на изменении ролей для путей (что, на мой взгляд, проще сделать с атрибутом [Authorize(Roles="role1,role2,role3")] для каждого метода), что делает мой вопрос немного другим. Если это невозможно, пожалуйста, сообщите мне, чтобы я мог найти лучший способ сделать это.


person Los Frijoles    schedule 05.12.2012    source источник


Ответы (1)


Элемент аутентификации (схема параметров ASP.NET) действует только на уровне приложения. У вас не может быть разных режимов аутентификации в одном приложении.

Однако вы можете указать элемент location ( Схема настроек ASP.NET) в определенную область и укажите Элемент авторизации (схема настроек ASP.NET) внутри него, который разрешает анонимных пользователей. Вы также можете разместить элемент авторизации в файле web.config в дочернем каталоге приложения.

Чтобы использовать две разные схемы аутентификации, вам придется преобразовать эту область в отдельное приложение. При желании оно может быть дочерним по отношению к родительскому приложению, но есть некоторые оговорки. Одним из предостережений, конечно же, является то, что состояние сеанса не будет использоваться совместно двумя приложениями.

Кроме того, см. вложенное приложение ASP.NET внутри IIS наследует родительские значения конфигурации? вопрос и Иерархия и наследование файла конфигурации ASP.NET.

person JamieSee    schedule 06.12.2012
comment
Это все еще имеет место в декабре 2013 года в эпоху MVC5? - person Kjensen; 09.12.2013
comment
@Kjensen, да, это неотъемлемое ограничение новой модели конвейера IIS. Если вам необходимо пройти аутентификацию из двух разных источников, вы можете использовать аутентификацию с помощью форм и написать собственный MembershipProvider. Одновременное включение обеих форм и проверки подлинности Windows не поддерживается. - person JamieSee; 07.01.2014