ASP.NET Windows角色提供程序(AspNetWindowsTokenRoleProvider)未注意到用户被添加到新组

Jus*_*zer 5 c# asp.net

我正在尝试创建一个应用程序,该应用程序使用<authorization>规则来限制有权访问应用程序的组.我正在使用Windows身份验证和ASP.NET的Windows角色提供程序(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>
Run Code Online (Sandbox Code Playgroud)

例如,假设我们有一个用户"Domain\joe",它目前不是本地"admins"组的成员,但我们想要添加他.我们去添加他,然后当Joe尝试登录时,他看到一个错误,他没有被授权(在多次登录尝试失败后).没有任何数量的IIS重新启动或Joe删除他的cookie和其他临时文件将解决此问题.

ASP.Net是否保留某种秘密角色/组缓存?如何将新用户添加到组中,然后确保角色提供程序将看到用户已添加到组中?

Jus*_*zer 5

从用户添加或从组中删除用户的时间与IIS将获取更改的时间之间存在延迟.您可以设置一个注册表值,用于更改缓存用户身份验证令牌的时间,或者禁用所有缓存.但是,更改此值(UserTokenTTL)似乎对IIS实现将用户添加到组所花费的时间没有影响.以下页面提供了有关UserTokenTTL注册表项的更多信息:http://support.microsoft.com/kb/954864