Ich verfüge über eine vorhandene ASP.NET-Anwendung, die die standortweite Formularauthentifizierung implementiert. Die Anwendung wird in mehreren Instanzen bereitgestellt (z. B. customer1, customer2, test, dev usw.), mit einer separaten Datenbank pro Instanz. SSL ist im Spiel. Die Instanzkonfiguration erfolgt über eine XML-Konfigurationsdatei.ASP.NET-Webdienst innerhalb der Formularauthentifizierungsanwendung
Ich habe eine neue Anforderung zum Hochladen/Herunterladen bestimmter Daten, die ich als öffentlichen Web-Service implementieren möchte.
Mein erster Gedanke hier war, selektiv Formularauthentifizierung für ein Unterverzeichnis der Anwendung (z. B. ~/Dienste) deaktivieren, und dann Authentifizierung über einen SOAP-Header oder ähnliches.
Allerdings finde ich keine Möglichkeit, Formulare auth selektiv zu deaktivieren.
Frage: Gibt es eine Möglichkeit, dies zu tun? Ich habe versucht, die <Position> Tag in Web-Konfiguration vergebens.
Wenn nicht, was sind Ihre Empfehlungen für die Einrichtung? Ich kann an die folgenden Optionen denken:
1) Erstellen Sie ein neues "Services" -Projekt in meiner Lösung, und konfigurieren Sie dann eine separate IIS ASP.NET-Anwendung für dieses Verzeichnis in jedem Fall. (Pro: einfacher Zugriff auf Instanzkonfiguration, die in der Zukunft benötigt werden kann. Con: Konfigurationsaufwand für jede relevante Instanz).
2) Erstellen Sie eine separate "Services" -Lösung, die benötigte Assemblys aus der Anwendungslösung referenziert und sie als separate ASP.NET-Anwendung hostet. Suchen Sie dann die DB-Verbindungszeichenfolge basierend auf dem in SOAP-Header bereitgestellten Benutzernamen. (Pro: einzelne App zum Konfigurieren in IIS. Con: Kein einfacher Zugriff auf Instanzkonfiguration.)
3) ??
Klarstellung: Ich habe die Antwort hier gesehen: Override ASP.NET forms authentication for a single page, aber die Verwendung eines Standort-Tags hilft nicht (Anfragen für den Web-Service werden immer noch umgeleitet). Die entsprechenden Abschnitte in meinem web.config wie folgt aussehen:
<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>
Jedes Mal habe ich den Pfad jeder verwendet, um den Standort-Tag in einer web.config in Form von „Services/MyService.asmx“ nicht „~/Dienstleistungen/MyService.asmx“ haben Sie versucht, spezifiziert worden ist es ohne den Tilde-Schrägstrich? –
Das war es. Ich könnte schwören, dass ich 3 verschiedene Versionen davon ausprobiert habe. Diesmal habe ich den Browser geschlossen und deine Lösung hat perfekt funktioniert. – dividius