2009-08-30 3 views
19

In den meisten Fällen erfordert meine Webanwendung Authentifizierung für alles. Es gibt ein paar Seiten, nämlich die Homepage, auf die die Leute zugreifen könnten, ohne sich zu authentifizieren.Wie gewähre ich mit FormsAuthentication den anonymen Zugriff auf eine URL?

Insbesondere würde Ich mag den anonymen Zugriff auf diese URLs ermöglichen:

/home 
/default.aspx 

ich asp.net MVC und FormsAuthentication verwenden. Beide URLs zeigen auf die gleiche Ansicht:

/home/index.aspx 

Hier ist meine aktuelle Konfiguration in web.config.

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 
<authorization>   
    <deny users="?" />  
</authorization> 

Lesen der Dokumentation für die Zulassung Tag, sagt sie „Konfiguriert die Genehmigung für eine Webanwendung, Client-Zugriff auf URL-Ressourcen zu steuern.“ Es scheint, dass ich in der Lage sein sollte, das Autorisierungs-Tag zu verwenden, um eine URL anzugeben und den Zugriff zu erlauben.

Etwas wie:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 

<authorization>   
    <deny users="?" />  
</authorization> 

<authorization url="/default.aspx">   
    <allow users="?" />  
</authorization> 

<authorization url="/home">   
    <allow users="?" />  
</authorization> 

Antwort

39

Ich hasse meine eigene Frage zu beantworten, aber da ich es herauszufinden, am Ende tat heraus, Ich denke, ich das Wissen teilen würde.

Verwenden Sie das location -Tag und setzen Sie die Tags für allow und deny in die richtige Reihenfolge.

Das Standort-Tag kann zum Konfigurieren einer bestimmten URL-Ressource verwendet werden. In meinem Fall wollte ich einige URLs und Ordner speziell konfigurieren.

Dies funktionierte zunächst nicht, da ich das Zulassen/Verweigern nicht in der richtigen Reihenfolge hatte. Laut MSDN "gewährt oder verweigert das Autorisierungsmodul den Zugriff auf eine URL-Ressource in Abhängigkeit davon, ob die erste gefundene Zugriffsregel eine Zulassen- oder Verweigern-Regel ist."

In meinem Fall musste ich alle meine öffentlichen Sachen zuerst (default.aspx, home, Stile, Bilder, Skripte) und dann lege ich alles andere ab. Ich habe den Pfad auf dem letzten Standort-Tag weggelassen. Das gilt für alle Dateien und Unterordner.

End Ergebnis kann ein Benutzer auf die Homepage bekommen, nach oben ziehen Bilder und Stile, aber für alles andere müssen log in

meine Web-Konfigurationsdatei Hier ist nun:.

<!--AUTHORIZATION AND AUTHENTICATION RULES--> 
    <location path="default.aspx"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Home"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Styles"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Scripts"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="images"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location allowOverride="true"> 
    <system.web> 
     <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" /> 
     </authentication> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

    <!--END AUTHORIZATION AND AUTHENTICATION RULES--> 
+13

Warum die Bescheidenheit und das CW? Wenn Sie Ihre eigene Frage beantworten und die Lösung posten, helfen Sie sich nicht nur selbst, sondern auch anderen. Sei stolz und nimm den Scheck. Danke für die Teilnahme. –

+0

Ich habe gestern nach dem googeln mehrerer plausibler Antworten wirklich mit diesem für ungefähr 3 Stunden gekämpft. Es war die Reihenfolge, die den Unterschied zu machen schien, und vielen Dank, dass Sie das hervorgehoben haben. Danke fürs Schreiben. – nealkernohan

+0

In MVC 4 müssen Sie dem Benutzer nur den von Ihnen gewünschten Controller erlauben. Es ist nicht notwendig, speziellen Zugriff auf die Stile/Skripte/etc hinzuzufügen. Ordner als das ist bereits erledigt. Verschieben Sie auch den Inhalt der vorhandenen Überschreibung in den Hauptsystemknoten system.web. –

Verwandte Themen