2012-12-04 2 views
16

Ho aggiunto elmah a un'applicazione asp.net mvc 4. La registrazione sta funzionando e ora sto cercando di configurare la sicurezza, ma elmah non sta rilevando le impostazioni e i registri rimangono visibili da tutti gli utenti.Come proteggere Elmah su ASP.Net MVC 4 con Sicurezza integrata di Windows: Elmah ignora le mie impostazioni

Questa è un'app intranet e come tale stiamo usando Windows integrato secuirty. Sto tentando di limitare l'accesso in modo che solo i membri del gruppo di annunci dominio \ log_readers possano leggere i log.

Ho letto la guida di installazione qui: http://code.google.com/p/elmah/wiki/SecuringErrorLogPages e ho anche letto diversi post su SO e altri formati che mi hanno portato ad aggiungere la configurazione roleManager e WindowsRoleProvider, tutto senza alcun risultato.

Ecco le parti ELMAH del mio web.config:

<elmah> 
<!-- 
    See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
    more information on remote access and securing ELMAH. 
--> 
<security allowRemoteAccess="true" /> 
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/Logs" /> 
</elmah> 
<location path="elmah.axd" inheritInChildApplications="false"> 
<system.web> 
    <authentication mode="Windows" /> 

    <roleManager defaultProvider="WindowsProvider" 
     enabled="true" cacheRolesInCookie="false"> 
    <providers> 
     <add 
     name="WindowsProvider" 
     type="System.Web.Security.WindowsTokenRoleProvider" /> 
    </providers> 
    </roleManager> 
    <httpHandlers> 
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers> 
    <!-- 
    See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
    more information on using ASP.NET authorization securing ELMAH. 
    --> 
    <authorization> 
    <allow roles="domain\log_readers"/> 
    <deny users="*" /> 
    </authorization> 

</system.web> 
<system.webServer> 
    <handlers> 
    <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
    </handlers> 
</system.webServer> 
</location> 

Ho anche provato un blocco completo verso il basso impostando il mio autorisation config di negare tutti

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

e anche

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

I registri rimangono aperti a tutti.

Sospetto che il problema potrebbe riguardare la posizione. Non ho apportato modifiche alla posizione di elmah. È accessibile dal percorso predefinito (http://server/myapp/elmah)

risposta

28

Se si utilizza Elmah.Mvc, le impostazioni di sicurezza sono abbastanza precise. Puoi facilmente proteggere la pagina elmah solo per essere disponibile per gli utenti registrati nel gruppo Admin, ad esempio.

Elmah.Mvc supporta i seguenti articoli in <appSettings>

<appSettings> 
    <!-- ELMAH configuration. Admin page only available for logged in users in 
     the Admin role. --> 
    <add key="elmah.mvc.disableHandler" value="false" /> 
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" /> 
    <add key="elmah.mvc.requiresAuthentication" value="true" /> 
    <add key="elmah.mvc.allowedRoles" value="Admin" /> 
    <add key="elmah.mvc.route" value="elmah" /> 
</appSettings> 

Le chiavi di interesse sono elmah.mvc.requiresAuthentication che accende l'utente debba essere loggato. E elmah.mvc.allowedRoles che specifica quale ruolo l'utente deve essere in.

È possibile installare Elmah.Mvc da nuget.

+0

ho elmah.mvc installato Darò che una prova. Sono queste impostazioni in aggiunta o al posto di quelle che ho già impostato – Twisted

+1

Se hai installato Elmah.Mvc tramite il nuget, dovrebbe aver aggiunto automaticamente quello sopra al tuo web.config. Le impostazioni sopra sono al posto di quelle che hai già configurato. –

+0

Ha funzionato, grazie – Twisted

3

La risposta di cui sopra ha lavorato molto, una volta che ho trovato il modo di determinare il ruolo quando si utilizza l'autenticazione di Windows:

Aprire una finestra di comando e immettere il seguente comando:

cmd /k net user <user> /Domain 

Per <user>, sostituire la nome utente. Il comando elencherà i gruppi a cui appartieni.

Le istruzioni sono venuti da "Come creare un sito Intranet utilizzando ASP.NET MVC" presso http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx