Обновите заявки пользователей и роли для аутентифицированного пользователя Windows в ASP.Net Core 2. - PullRequest
0 голосов
/ 19 мая 2018

Я столкнулся с проблемой, из-за которой роли пользователей, прошедших проверку подлинности Windows, кэшируются и не обновляются, пока я не перезапущу приложение.Хотя роли пользователей меняются не часто, они меняются и могут меняться до перезапуска приложения.

Я размещаю свое приложение ASP.NET Core 2 на IIS через Kestrel и Базовый модуль ASP.NET .Через 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());
         });

Добавление Global 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, они явно обновляются (для производства хотят использовать встроенные функции и не хотят прибегать к этому).

Какие изменения конфигурации, аннулирование кэша или сброс сеанса мне нужно выполнить, чтобы гарантировать, что при изменении ролей AD пользователя мое приложение будет отражать их текущие роли?

...