Usługa sieci Web ASP.NET w aplikacji do uwierzytelniania formularzy
Mam istniejącą aplikację ASP.NET, która implementuje uwierzytelnianie formularzy w całej witrynie. Aplikacja jest wdrażana w wielu instancjach (np. Customer1, customer2, test, dev, etc ...), z osobną bazą danych na instancję. SSL jest w grze. Konfiguracja instancji odbywa się za pomocą pliku konfiguracyjnego XML.
Mam nowy wymóg zezwalający na przesyłanie / pobieranie niektórych danych, które chciałbym wdrożyć jako publiczną usługę internetową.
Moją początkową myślą było wybiórcze wyłączenie uwierzytelniania formularzy dla podkatalogu aplikacji (np. ~ / Services), a następnie uwierzytelnianie za pomocą nagłówka SOAP lub podobnego.
Nie znajduję jednak sposobu selektywnego wyłączania autoryzacji formularzy.
Pytanie: Czy istnieje sposób, aby to zrobić? Próbowałem tagu <location> w konfiguracji sieci bezskutecznie.
Jeśli nie, jakie są twoje zalecenia, jak to skonfigurować? Mogę wymyślić następujące opcje:
1) Utwórz nowy projekt „Usługi” w moim rozwiązaniu, a następnie skonfiguruj osobną aplikację ASP.NET IIS w tym katalogu w każdej instancji. (Pro: łatwy dostęp do konfiguracji instancji, która może być potrzebna w przyszłości. Con: obciążenie konfiguracji dla każdej odpowiedniej instancji).
2) Utwórz osobne rozwiązanie „Usługi”, które odwołuje się do potrzebnych zespołów z rozwiązania aplikacji i udostępnia je jako oddzielną aplikację ASP.NET. Następnie wyszukaj ciąg połączenia db na podstawie nazwy użytkownika podanej w nagłówku SOAP. (Pro: jedna aplikacja do konfiguracji w IIS. Con: Brak łatwego dostępu do konfiguracji instancji).
3)?
Wyjaśnienie: widziałem tutaj odpowiedź:Zastąp uwierzytelnianie formularzy ASP.NET dla pojedynczej strony, ale użycie znacznika lokalizacji nie pomaga (żądania usługi internetowej są nadal przekierowywane). Odpowiednie sekcje w moim web.config wyglądają tak:
<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>