9

Possiedo un'app MV.NET di ASP.Net che utilizza Sicurezza integrata e che deve essere in grado di garantire l'accesso aperto a un percorso specifico. Il percorso in questione è ~/Agreements/Upload. Ho provato alcune cose e nulla ha funzionato finora.Come posso consentire a tutti gli utenti di accedere a una rotta all'interno di un sito Web con autenticazione integrata?

<configuration> 
    <location path="~/Agreements/Upload"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

In IIS in Protezione directory> Metodi di autenticazione Ho selezionato solo "Autenticazione integrata di Windows". Ora, questo potrebbe essere parte del mio problema (come anche se IIS non consente l'IIS di cui sopra). Ma se questo è il caso, come posso configurarlo in modo che Integrated Security funzioni ma consente alle persone che non sono autenticate di accedere al percorso specificato?

+2

PERICOLO, Non è possibile proteggere l'app MVC in questo modo. Vedi http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute.aspx – RickAndMSFT

+0

@ RickAndMSFT è su una crociata giusta. Leggo il suo blog e sono convinto che abbia ragione. – MrBoJangles

risposta

-1

È necessario consentire anche l'accesso anonimo in IIS, in quanto altrimenti solo gli utenti con autenticazione Windows potranno accedere in qualsiasi punto del sito. Si dovrebbe negare l'accesso per impostazione predefinita agli utenti anonimi.

<deny users="?"/> 
<allow users="*"/> 

Nella sezione <location>, permettere agli utenti anonimi.

<allow users="?"/> 
+0

Quando consento di consentire l'accesso anonimo in IIS, mi sembra di perdere la capacità di estrarre il nome utente delle persone che usano la sicurezza integrata di Windows ... –

+0

Ah .. il bit difficile è secondo http://msdn.microsoft.com /en-us/library/wce3kxhd.aspx (Autorizzazione ASP.NET) - "Le regole contenute nei file di configurazione a livello di applicazione hanno la precedenza sulle regole ereditate" –

+2

Questa risposta non è solo sbagliata, è pericolosa, come sottolineato da un commento su la domanda. – Andy

16

In ASP.NET MVC non si dovrebbe usare l'elemento posizione nel web.config. Mentre il motore dei moduli Web è mappato su file fisici su disco, il motore MVC utilizza il routing. Ciò significa che potresti inavvertitamente consentire accidentalmente l'accesso a un "controller protetto" attraverso un percorso personalizzato.

Il modo consigliato di sicurezza delle applicazioni ASP.NET MVC è attraverso l'uso dell'attributo Autorizza, come si vede nel seguente esempio:

public class HomeController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

L'azione del controller è ciò che si desidera proteggere e non il percorso . Il CdA ASP.NET MVC sicurezza, Levi Broderick è piuttosto vocale su questo problema:

  1. Excluding an action from authorization in ASP.NET MVC 2
  2. Problem with Authorization with IIS and MVC.
+2

Per la versione MVC 4 vedere http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous -attribute.aspx – RickAndMSFT

+0

@ Rick.Anderson-at-Microsoft.com Grazie per questo aggiornamento. L'articolo è interessante. Abbiamo implementato qualcosa di molto simile in MVC3 per risolvere il controller di accesso anonimo e/o l'azione del controller. – Junto

Problemi correlati