Поставщик ролей Windows ASP.NET (AspNetWindowsTokenRoleProvider) не замечает добавление пользователя в новую группу - PullRequest
5 голосов
/ 21 сентября 2009

Я пытаюсь создать приложение, которое использует правила для ограничения групп, которым разрешен доступ к приложению. Я использую проверку подлинности 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 хранится какой-то секретный кэш ролей / групп? Как вы добавляете нового пользователя в группу, а затем гарантируете, что поставщик ролей увидит, что пользователь был добавлен в группу?

1 Ответ

5 голосов
/ 10 февраля 2011

Похоже, что существует задержка между временем добавления или удаления пользователя из группы и моментом, когда IIS обнаружит изменение. Существует значение реестра, которое вы можете установить, чтобы изменить время кэширования токенов аутентификации пользователя или отключить кэширование все вместе. Однако изменение этого значения (UserTokenTTL), похоже, не повлияло на время, необходимое IIS, чтобы понять, что пользователь был добавлен в группу. На следующей странице содержится дополнительная информация о разделе реестра UserTokenTTL: http://support.microsoft.com/kb/954864

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...