我遇到了一个问题,其中Windows身份验证的用户角色似乎已缓存,并且在我重新启动应用程序之前不会更新。虽然用户的角色不会经常更改,但他们会在应用程序重新启动之前进行更改并进行更改。
我通过IIS和Kestrel在ASP.NET Core Module上托管我的ASP.NET Core 2应用程序。通过AuthorizeFilter
我有一个需要经过身份验证的用户的全局策略。不会提示用户输入凭据,而是通过集成Windows身份验证对用户进行身份验证。以下是我的应用程序配置的片段,它与服务器主机配置,身份验证和授权有关:
private static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
})
.UseIISIntegration()
.Build();
身份验证配置
services.AddAuthentication(options =>
{
options.DefaultScheme = IISDefaults.AuthenticationScheme;
options.DefaultForbidScheme = IISDefaults.AuthenticationScheme;
});
授权配置
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAuthenticatedUser",
policyBuilder => policyBuilder.RequireAuthenticatedUser());
});
添加全球AuthorizeFilter
:
services.AddMvc(mvcOptions =>
{
mvcOptions.Filters.Add(new AuthorizeFilter("RequireAuthenticatedUser"));
});
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:4100",
"sslPort": 0
}
}
}
所有这些都非常有效,用户需要进行身份验证,我才能检索他们的Active Directory角色。遗憾的是,当这些角色在没有重启应用程序的情况下发生变化时,我无法获得更新的角色列表。这意味着应该有访问权限的用户不能访问,而那些不再具有访问权限的用户仍然可以访问。我的所有角色检查都基于ClaimsPrincipal.IsInRole("xyz")
,它在用户首次进行身份验证时仍然停滞不前。但是,如果我使用System.DirectoryServices.AccountManagement
检查用户在Active Directory中的当前角色,则会明确更新(因为制作人员希望使用内置功能,并且不想诉诸于此)。< / p>
我需要执行哪些配置更改,缓存失效或会话重置,以确保当用户的AD角色更改时,我的应用程序将反映其当前角色?