Как защитить Elmah от ASP.Net MVC 4 с помощью Windows Integrated Security: Elmah игнорирует мои настройки - программирование
Подтвердить что ты не робот

Как защитить Elmah от ASP.Net MVC 4 с помощью Windows Integrated Security: Elmah игнорирует мои настройки

Я добавил elmah в приложение asp.net mvc 4. Logging работает, и теперь я пытаюсь настроить безопасность, но elmah не подбирает настройки, и журналы остаются видимыми для всех пользователей.

Это приложение для интрасети, и поэтому мы используем встроенные secuirty. Я пытаюсь ограничить доступ, чтобы только члены группы объявлений \log_readers домена могли читать журналы.

Я читал руководство по настройке здесь: http://code.google.com/p/elmah/wiki/SecuringErrorLogPages, и я также прочитал несколько сообщений о SO и других формамах, которые привели мне добавить конфигурацию roleManager и WindowsRoleProvider, все безрезультатно.

Вот части elmah моего 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>

Я также попробовал полную блокировку, установив конфигурацию авторизации для отказа всем

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

а также

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

Журналы остаются открытыми для всех.

Я подозреваю, что проблема может быть в этом месте. Я не внес изменений в расположение elmah. Доступ к нему осуществляется по умолчанию (http://server/myapp/elmah)

4b9b3361

Ответ 1

Если вы используете Elmah.Mvc, у них есть довольно мелкие настройки безопасности. Вы можете легко обеспечить, чтобы страница elmah была доступна только для зарегистрированных пользователей в группе Admin, например.

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, который указывает, какую роль должен находиться пользователь.

Вы можете установить Elmah.Mvc из nuget.

Ответ 2

Вышеприведенный ответ отлично поработал, как только я узнал, как определить роль при использовании проверки подлинности Windows:

Откройте командное окно и введите следующую команду:

cmd /k net user <user> /Domain

Для <user> замените свое имя пользователя. Команда перечислит группы, к которым вы принадлежите.

Инструкции взяты из "Как создать сайт интрасети с использованием ASP.NET MVC" в http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx