Как защитить 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)
Ответы
Ответ 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