5

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> 
+3

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? –

+0

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

Antwort

4

ich die Lage Tag funktionieren würde denken würde, wo Sie den Diensteordner festlegen und alle Benutzer erlauben, so etwas wie:

<location path="services"> 
     <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     </system.web> 
</location> 

Aber Sie haben angegeben, dass das nicht funktioniert. Haben Sie versucht, eine web.config-Datei in den Dienstordner zu stellen und die Formularauthentifizierung zu deaktivieren und allen Benutzern in dieser Datei zu erlauben?

+0

Wie oben erwähnt, war der Fehler, den ich gemacht habe, "~ \ Services" für den Pfad, anstatt nur "Services" – dividius

+0

Glad es funktioniert, Schande asp.net ist inkonsequent in denen Sie die ~/hat mich erwischt bei ein paar Gelegenheiten –

0

Sie könnten auch eine (überschreibende) Datei web.config im Ordner services mit der Zugriffssteuerung auf anonym setzen.

0

was für mich funktionierte, war den Benutzern alle Benutzer Zugriff in dem Ordner zu ermöglichen, in dem sich meine Webservices befinden. Zuerst habe ich eine Konfigurationsdatei in diesem Ordner hinzugefügt und den folgenden Code eingefügt, um allen Benutzern zu erlauben.

<authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
Verwandte Themen