ASP.NET 3.5 IIS7 Реализация безопасности ролей
Я работаю над приложением ASP.NET 3.5, работающим на IIS7 (Server '08), используя стандартную проверку подлинности MS Forms и SqlRolesProvider. (Я использовал инструмент aspnet_regsql для генерации таблиц).
У нас есть три роли: SysAdmins, AppAdmins и Users. Все пользователи находятся в Users, и пользователь может быть либо в SysAdmins, AppAdmins, либо в обоих.
Я не могу получить каталог администратора, чтобы заблокировать доступ пользователям, не входящим в SysAdmins и AppAdmins. Либо он впускает всех вошедших в систему пользователей, либо никого.
Вот соответствующие биты моей текущей конфигурации:
<configuration>
...
<system.web>
<authentication mode="Forms">
<forms loginUrl="/client/security/login.aspx" timeout="480" />
</authentication>
<authorization>
</authorization>
<roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60">
<providers>
<clear />
<add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
...
</system.web>
<system.webServer>
<security>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
...
</system.webServer>
<location path="admin">
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs=""/>
<add accessType="Allow" roles="SysAdmins,AppAdmins" />
</authorization>
</security>
</system.webServer>
<system.web>
<authorization>
<deny users="*"/>
<allow roles="SysAdmins,AppAdmins"/>
</authorization>
</system.web>
</location>
</configuration>
Я считаю, что эта конфигурация в настоящее время блокирует всех. Я сделал подобные конфигурации, которые никого не блокируют.
Я подозреваю, что проблема заключается в использовании разделов system.web и system.webserver. Любая помощь в настройке этой конфигурации будет принята с благодарностью.
ОБНОВИТЬ
При удалении раздела
1 ответ
Даже в режиме IIS7 Integrated Pipeline я успешно использую старые блоки авторизации в стиле IIS6. Пожалуйста, попробуйте код ниже, который включает в себя следующие изменения:
- Добавлено
к первому блоку авторизации - Переключен порядок
и в блоке авторизации для конкретного местоположения - Удалены
блоки авторизации для конкретного местоположения. - Чтобы пропустить файлы js, мой лучший совет - переместить их в отдельную папку и разрешить всем, кроме анонимных, доступ к этой папке (см. Ниже). Кроме того, вы можете назвать каждый JS-файл в атрибуте пути местоположения. Однако это решение менее ремонтопригодно.
Пожалуйста, дайте мне знать, если это работает для вас!
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="/client/security/login.aspx" timeout="480" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60">
<providers>
<clear />
<add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
</system.web>
<location path="admin">
<system.web>
<authorization>
<allow roles="SysAdmins,AppAdmins"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="js">
<system.web>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>