2009-08-30 9 views
19

Per la maggior parte, la mia webapp richiede l'autenticazione per fare qualsiasi cosa. Ci sono alcune pagine, ovvero la homepage, che mi piacerebbe che le persone potessero accedere senza autenticazione.Come concedere l'accesso anonimo a un URL utilizzando FormsAuthentication?

In particolare, mi piacerebbe per consentire l'accesso anonimo a questi URL:

/home 
/default.aspx 

Sto usando asp.net MVC e FormsAuthentication. Entrambi gli URL puntano alla stessa vista:

/home/index.aspx 

Ecco il mio attuale configurazione nel web.config.

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

Leggendo la documentazione per il tag 'autorizzazione, si dice "Consente di configurare l'autorizzazione per un'applicazione Web, controllare l'accesso dei client alle risorse URL." Sembra che dovrei essere in grado di utilizzare il tag di autorizzazione per specificare un URL e consentire l'accesso.

Qualcosa di simile:

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

risposta

39

odio rispondere alla mia domanda, ma da quando ho fatto finiscono per capire che fuori, immagino che vorrei condividere la conoscenza.

Utilizzare il tag posizione e inserire i tag allow e deny nell'ordine corretto.

Il tag posizione può essere utilizzato per configurare una risorsa URL specifica. Nel mio caso ho voluto configurare alcuni URL e cartelle in particolare.

Questo non ha funzionato all'inizio perché non avevo il permesso/rifiuto nell'ordine corretto. Secondo MSDN, "il modulo di autorizzazione concede o nega l'accesso a una risorsa URL a seconda che la prima regola di accesso trovata sia una regola di consenso o di rifiuto".

Nel mio caso avevo bisogno di mettere prima tutte le mie cose pubbliche (default.aspx, home, stili, immagini, script) e poi ho messo da parte tutto il resto. Ho omesso il percorso sull'ultimo tag di posizione. Questo lo rende applicabile a tutti i file e sottocartelle.

Risultato finale, un utente può raggiungere la home page, tirare sulle immagini e gli stili, ma per tutto il resto deve accedere

Ecco il mio file di configurazione web ora:.

<!--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

Perché la modestia e la la CW? Se si finisce per rispondere alla propria domanda e postare la soluzione non si sta solo aiutando te stesso, ma altri. Sii orgoglioso e prendi l'assegno. Grazie per aver partecipato. –

+0

Ho davvero faticato con questo per circa 3 ore ieri dopo aver cercato su Google più risposte plausibili. Era l'ordine che sembrava fare la differenza e molte grazie per averlo evidenziato. Grazie per la pubblicazione. – nealkernohan

+0

In MVC 4 è sufficiente consentire all'utente di selezionare il controller desiderato. Non è necessario aggiungere un accesso speciale agli stili/script/ecc. cartelle come già fatto. Sposta anche il contenuto dell'override che hai posto nel nodo system.web principale. –

Problemi correlati