2009-03-27 2 views
1

Ich habe eine asp.net (dynamische Daten) Website als eine Anwendung in einem Unterverzeichnis einer anderen Website eingerichtet. Diese Website erfordert andere Sicherheitseinstellungen als die Website der obersten Ebene. Etwas wie:ASP.NET web.config Autorisierung Einstellungen ignoriert

<authorization> 
     <allow roles="ADMIN"/> 
     <deny users="*"/> 
    </authorization> 

Diese Einstellungen werden auf der Untersite ignoriert. Sie arbeiten jedoch auf der Top-Level-Site, aber selbst wenn sie auf der Top-Level-Site gesetzt sind, werden sie nicht von der Sub-Site geerbt und sind frei zugänglich. Was könnte dazu führen, dass diese Einstellungen ignoriert werden? Ich habe versucht, das Hinzufügen:

<location path="." inheritInChildApplications="false"> 

auf die oberste Ebene web.config und dann die oben Berechtigungsregel in der Sub-Sites einrichten, versucht auch nur alle Benutzer zu leugnen. Beim Besuch der Website sieht es so aus: http://mysite/mybrokensite

Ich verwende Windows-Authentifizierung.

+0

Können wir das -Tag sehen? –

Antwort

2

denke ich, die Schlüssel, was dies als Anwendung in einem Unterverzeichnis von einem anderen Standort

Website ist

Wenn es eine separate Anwendung IIS sollte innerhalb ist eingerichtet haben sie eigenes Web ist. Die Konfigurationsdatei und die Sicherheitseinstellungen können von dort aus festgelegt werden. Sie haben also eine web.config für die Hauptseite und eine für die Unterwebsite. wirklich, sie sind zwei Anwendungen.

Wenn es nur ein Unterordner unter Ihrer Website ist, gilt dies nicht. Es hängt davon ab, wie Sie es unter IIS eingerichtet haben. Wenn es sich um eine separate App handelt, wird das Symbol ein Welt/Kohl-Symbol sein. Wenn es ein Unterordner ist, wird das Symbol ... nun ein Ordner.

+0

Die Website ist als separate Anwendung eingerichtet (hat das Kohlentyp-Symbol) und hat ihre eigene web.config. Aus diesem Grund habe ich Probleme zu verstehen, warum die web.config-Einstellungen nicht gelesen werden. Ich habe versucht, die Sicherheitseinstellungen in beiden web.configs (Top-und Sub-Level-Websites) vergebens. –

+0

Haben Sie Windows-Authentifizierung für die Unter-Site sowie die Haupt-Website eingerichtet? d. h. Klicken Sie mit der rechten Maustaste auf die Unterwebsite, wählen Sie Eigenschaften, Registerkarte Verzeichnissicherheit und dann Schaltfläche Bearbeiten. Standardmäßig wird es auf anonym eingestellt, was dazu führt, dass Ihre Einstellungen ignoriert werden –

0

Um Tims Antwort näher auszuführen, stellen Sie in IIS sicher, dass es als virtuelles Verzeichnis eingerichtet ist. Sehen Sie sich die Eigenschaftenseite für dieses Verzeichnis auf der Registerkarte IIS-Verwaltung, Verzeichnis (oder Basisverzeichnis) an. Wenn das Anwendungslabel ausgegraut ist, klicken Sie auf die Schaltfläche Erstellen. Jetzt lädt IIS die Datei web.config aus diesem Verzeichnis.

0

Ich tippte eine Zusammenfassung, da viele mit der gleichen Situation bezüglich der Unterordnerauthentifizierung konfrontiert waren.

Subfolder Authorization

  • ASP.NET kann nur einen einzigen Authentifizierungsmodus für eine Anwendung hat.
  • Die verschiedenen Anwendungen können Ressource unter ihnen nicht teilen.

Szenario

ist die Homepage Lassen Sie sagen, sollte nicht prompt Login-Dialog. Es sollte die Benutzer passieren lassen, ohne dass sie sich einloggen müssen. In derselben Anwendung muss jedoch in einem anderen Ordner vermutlich eine andere Seite die Benutzerberechtigung für die Datenbanktabelle mit der Benutzer-Netzwerk-Login-ID überprüfen. Standardmäßig behandelt IE alle Websites mit nur Hostnamen als Intranet. Durch die standardmäßige Intraneteinstellung wird das Anmeldedialogfeld nicht aufgerufen und Benutzeranmeldung und Kennwort werden an die Anwendung weitergegeben, wenn die Windows-Authentifizierung verwendet wird. Die heikle Party ist jedoch, wenn die Anwendung eine tatsächliche Domäne hat, IE wird denken, dass es eine Internetsite ist, und es wird die Anmeldung und das Kennwort eingeben, wenn Windows-Authentifizierung verwendet wird.


Der einzige Weg, nicht Login-Dialog für Internet-Website mit der Windows-Authentifizierung zu promopt ist auch in IIS auf dem die anonyme Authentifizierung zu aktivieren. Sie verlieren jedoch die Möglichkeit, die Anmeldeinformationen zu erfassen, da Anonymous Vorrang vor der Windows-Authentifizierung hat. Die gute Nachricht ist, dass es eine Möglichkeit gibt, dieses Problem zu lösen. Wenn ein Anwendungsunterordner die Anmeldeinformationen erfassen muss, müssen Sie die übergeordnete Berechtigung im Element "Location" in web.config überschreiben.

1 in IIS konfigurieren Authentifizierung wie folgt:

  1. Anonym-Authentifizierung aktivieren,
  2. Windows-Authentifizierung aktivieren

2 Fügen Sie die folgenden in Web.Config.

<authentication mode="Windows" /> 
    <authorization> 
    <allow users="*" /> 
</authorization> 

<!-- secured is the relative subfolder name. deny anonymous user, so only the authenticated login will pass through --> 
<location path="secured" allowOverride="true"> 
    <system.web> 
    <authorization>   
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</location>