如何在ASP.Net MVC 4中使用Windows集成安全来保护Elmah:Elmah忽略我的设置

16

我已将elmah添加到asp.net mvc 4应用程序中。日志记录正常工作,现在我正在尝试配置安全性,但是elmah没有获取设置,而且所有用户都可以看到日志。

这是一个Intranet应用程序,因此我们使用Windows集成安全性。我正在尝试限制访问,以便只有域\log_readers AD组的成员可以读取日志。

我已阅读了此处的设置指南:http://code.google.com/p/elmah/wiki/SecuringErrorLogPages,并且我还阅读了 SO 和其他论坛上的几篇帖子,这些帖子促使我添加了roleManager和WindowsRoleProvider配置,但均无效。

这是我的web.config文件中关于elmah部分的内容:

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

我还尝试了完全的锁定,通过将我的授权配置设置为拒绝所有人。

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

还有

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

记录仍然对所有人开放。

我怀疑问题可能出在位置上。我没有更改elmah的位置。它从默认位置访问(http://server/myapp/elmah)。

2个回答

29

如果您使用Elmah.Mvc,它具有相当精细的安全设置。例如,您可以轻松地将elmah页面保护起来,仅供已登录管理组用户使用。

Elmah.Mvc支持以下项目在<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>

关键是elmah.mvc.requiresAuthentication,它打开需要用户已登录。而elmah.mvc.allowedRoles指定了用户必须在哪个角色中。

您可以从NuGet安装Elmah.Mvc。


我已经安装了 elmah.mvc,我会尝试一下它。这些设置是作为额外设置还是替代我已经设置的那些? - Twisted
1
如果您通过NuGet安装了Elmah.Mvc,它应该已经自动将上述内容添加到您的web.config中。上述设置代替了您已经配置的设置。 - Jack Hughes
如果您正在使用Windows身份验证,则需要包括域(区分大小写),以使“elmah.mvc.allowedUsers”正常工作。之前的elmah版本不需要域。 - Brian Cauthon

3

上述答案非常好,但是当使用Windows身份验证时,需要确定角色。具体操作如下:

打开命令行窗口并输入以下命令:

cmd /k net user <user> /Domain

对于<user>,请替换为您的用户名。该命令将列出您所属的组。

这些指令来自于《如何使用ASP.NET MVC创建内部网站》(网址:http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接