2012-12-04 5 views
16

Ich habe Elmah zu einer asp.net mvc 4-Anwendung hinzugefügt. Logging funktioniert und jetzt versuche ich die Sicherheit zu konfigurieren, aber elmah nimmt die Einstellungen nicht auf und die Logs bleiben für alle Benutzer sichtbar.Wie sichere ich Elmah auf ASP.Net MVC 4 mit Windows Integrated Security: Elmah ignoriert meine Einstellungen

Dies ist eine Intranet-App und als solche verwenden wir Windows integrierte secuirty. Ich versuche, den Zugriff zu beschränken, sodass nur Mitglieder der Anzeigengruppe "Domäne \ log_Reader" die Protokolle lesen können.

Ich habe die Setup-Anleitung hier gelesen: http://code.google.com/p/elmah/wiki/SecuringErrorLogPages und ich habe auch mehrere Beiträge auf SO und anderen Formularen gelesen, die mich dazu geführt hat, die Konfiguration von roleManager und WindowsRoleProvider hinzuzufügen, alles ohne Erfolg.

Hier sind die Elmah Teile meiner 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> 

ich auch eine komplette Sperre nach unten versucht haben, durch meine autorisation Config Einstellung jeder zu leugnen

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

und auch

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

Die Protokolle bleiben für alle offen.

Ich vermute, dass das Problem mit dem Standort sein kann. Ich habe keine Änderungen am Elmah-Standort vorgenommen. Es wird vom Standardstandort aus zugegriffen (http://server/myapp/elmah)

Antwort

28

Wenn Sie Elmah.Mvc verwenden, haben sie ziemlich feinkörnige Sicherheitseinstellungen. Sie können die elmah-Seite einfach sichern, um beispielsweise nur eingeloggten Benutzern in der Admin-Gruppe zur Verfügung zu stehen.

Elmah.Mvc unterstützt die folgenden Elemente 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> 

Die Schlüssel von Interesse elmah.mvc.requiresAuthentication sind, die auf den Benutzer schaltet benötigen angemeldet sein. Und elmah.mvc.allowedRoles, die in die Rolle der Benutzer angibt, muss sein.

Sie können Elmah.Mvc von nuget installieren.

+0

ich elmah.mvc installiert haben werde ich versuchen. Sind diese Einstellungen zusätzlich oder anstelle derer, die ich bereits eingerichtet habe? – Twisted

+1

Wenn Sie Elmah.Mvc über nugget installiert haben, sollte das obige automatisch zu Ihrer web.config hinzugefügt werden. Die obigen Einstellungen sind nicht die, die Sie bereits konfiguriert haben. –

+0

Arbeitete ein Leckerbissen, danke – Twisted

3

Die obige Antwort funktionierte großartig, wenn ich herausgefunden habe, wie die Rolle zu bestimmen, bei der Verwendung von Windows-Authentifizierung:

öffnen ein Fenster Befehl und geben Sie den folgenden Befehl ein:

cmd /k net user <user> /Domain 

Für <user>, ersetzen Sie Ihre Nutzername. Der Befehl listet die Gruppen auf, denen Sie angehören.

Die Anweisungen kamen aus „Wie ein Intranet-Site mithilfe von ASP.NET MVC erstellen“ auf http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx