在ASP.Net Core 2

时间:2018-05-18 22:00:20

标签: iis asp.net-core active-directory asp.net-core-2.0 windows-authentication

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

我通过IISKestrelASP.NET Core Module上托管我的ASP.NET Core 2应用程序。通过AuthorizeFilter我有一个需要经过身份验证的用户的全局策略。不会提示用户输入凭据,而是通过集成Windows身份验证对用户进行身份验证。以下是我的应用程序配置的片段,它与服务器主机配置,身份验证和授权有关:

来自Program.cs的片段

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

来自Startup.cs的片段

身份验证配置

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"));
                });

来自launchSettings.json的片段

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:4100",
      "sslPort": 0
    }
  }
}

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

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

0 个答案:

没有答案