刷新ASP.Net Core 2中Window认证用户的用户声明和角色

ahs*_*ele 7 iis active-directory windows-authentication asp.net-core asp.net-core-2.0

我遇到一个问题,其中Windows身份验证的用户角色似乎被缓存,直到我重新启动应用程序才更新.虽然用户的角色不会经常更改,但他们确实会更改,并且可以在执行应用程序重新启动之前进行更改.

我通过KestrelASP.NET核心模块IIS上托管我的ASP.NET Core 2应用程序.通过我有一个全球政策,需要经过身份验证的用户.不会提示用户输入凭据,而是通过集成Windows身份验证对用户进行身份验证.以下是我的应用程序配置的片段,涉及服务器主机配置,身份验证和授权:AuthorizeFilter

来自Program.cs的片段

private static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
               .UseKestrel(options =>
                           {
                               options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30); 
                           })
               .UseIISIntegration()
               .Build();
Run Code Online (Sandbox Code Playgroud)

来自Startup.cs的片段

验证配置

services.AddAuthentication(options =>
                       {
                           options.DefaultScheme = IISDefaults.AuthenticationScheme;
                           options.DefaultForbidScheme = IISDefaults.AuthenticationScheme;
                       });
Run Code Online (Sandbox Code Playgroud)

授权配置

services.AddAuthorization(options =>
         {
             options.AddPolicy("RequireAuthenticatedUser",
                               policyBuilder => policyBuilder.RequireAuthenticatedUser());
         });
Run Code Online (Sandbox Code Playgroud)

增加全球AuthorizeFilter:

services.AddMvc(mvcOptions =>
                {
                  mvcOptions.Filters.Add(new AuthorizeFilter("RequireAuthenticatedUser"));
                });
Run Code Online (Sandbox Code Playgroud)

来自launchSettings.json的片段

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:4100",
      "sslPort": 0
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所有这些都非常有效,用户需要进行身份验证,并且我能够检索他们的Active Directory角色.遗憾的是,当这些角色在没有重启应用程序的情况下发生变化时,我无法获得更新的角色列表.这意味着应该有访问权限的用户不能访问,而那些不再具有访问权限的用户仍然可以访问.我的所有角色检查都基于ClaimsPrincipal.IsInRole("xyz"),从用户首次进行身份验证时仍然停滞不前.但是,如果我System.DirectoryServices.AccountManagement用来检查用户在Active Directory中的当前角色,他们会明确更新(因为生产想要使用内置功能而不想诉诸于此).

我需要执行哪些配置更改,缓存失效或会话重置,以确保当用户的AD角色更改时,我的应用程序将反映其当前角色?