У меня есть приложение ASP.NET, которое реализует проверку подлинности с помощью форм по всему сайту. Приложение развертывается в нескольких экземплярах (например, customer1, customer2, test, dev и т. Д.) С отдельной базой данных для каждого экземпляра. SSL в игре. Конфигурация экземпляра выполняется через файл конфигурации XML.
У меня есть новое требование разрешить загрузку / выгрузку определенных данных, которое я хотел бы реализовать в качестве общедоступного веб-сервиса.
Моя первоначальная мысль заключалась в том, чтобы выборочно отключить аутентификацию форм для подкаталога приложения (например, ~ / Services), а затем выполнить аутентификацию через заголовок SOAP или аналогичный.
Однако я не нахожу способ выборочного отключения аутентификации форм.
Вопрос: есть ли способ сделать это? Я пробовал тег в веб-конфигурации, но безрезультатно.
Если нет, каковы ваши рекомендации по настройке? Я могу думать о следующих вариантах:
1) Создайте новый проект «Службы» в моем решении, а затем настройте отдельное приложение IIS ASP.NET для этого каталога в каждом экземпляре. (Pro: легкий доступ к конфигурации экземпляра, который может потребоваться в будущем. Con: нагрузка на конфигурацию для каждого соответствующего экземпляра).
2) Создайте отдельное решение «Службы», которое ссылается на необходимые сборки из решения приложения, и разместите его как отдельное приложение ASP.NET. Затем найдите строку подключения к базе данных на основе имени пользователя, указанного в заголовке SOAP. (Pro: отдельное приложение для настройки в IIS. Con: Нет простого доступа к конфигурации экземпляра.)
3) ??
Уточнение: я видел ответ здесь: Переопределение проверки подлинности форм ASP.NET для одной страницы , но использование тега местоположения не помогает (запросы на веб-службу все еще перенаправляются) Соответствующие разделы в моем web.config выглядят так:
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
<location path="~/Services/MyService.asmx">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>