Я пытаюсь создать приложение, которое использует правила для ограничения групп, которым разрешен доступ к приложению. Я использую проверку подлинности Windows и поставщика ролей Windows для ASP.NET (AspNetWindowsTokenRoleProvider). Я использую локальные группы для определения ролей, так как домен, на котором я работаю, и домен, в котором приложение будет развернуто, будут другими.
Когда я первоначально настроил развертывание приложения на сервере IIS7 и настроил сайт для использования базовой аутентификации с соответствующим доменом по умолчанию, все работало нормально для пользователей, которые уже были назначены авторизованным группам. Однако когда я попытался добавить нового пользователя в любую из авторизованных групп, этот пользователь никогда не был авторизован для доступа к приложению. Я сделал все, кроме перезагрузки машины. Я перезапустил IIS, а также удалил все временные файлы и файлы cookie на стороне клиента, но безрезультатно.
Следует отметить, что это приложение ASP.Net MVC, хотя я не думал, что это действительно что-то изменит. Вот соответствующие записи из моего web.config:
<!-- use windows authentication -->
<authentication mode="Windows" />
<!-- use the Windows role provider -->
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
<!-- global authorization rules -->
<authorization>
<allow roles="admins,contractors"/>
<deny users="*" />
</authorization>
Например, допустим, у нас есть пользователь "Domain \ joe", который в настоящее время не является членом локальной группы "admins", но мы хотим добавить его. Мы добавляем его, и затем, когда Джо пытается войти, он видит ошибку, что он не авторизован (после нескольких неудачных попыток входа). Никакие перезапуски IIS или удаление Джо его файлов cookie и других временных файлов не решат эту проблему.
В ASP.Net хранится какой-то секретный кэш ролей / групп? Как вы добавляете нового пользователя в группу, а затем гарантируете, что поставщик ролей увидит, что пользователь был добавлен в группу?