ahs*_*ele 7 iis active-directory windows-authentication asp.net-core asp.net-core-2.0
我遇到一个问题,其中Windows身份验证的用户角色似乎被缓存,直到我重新启动应用程序才更新.虽然用户的角色不会经常更改,但他们确实会更改,并且可以在执行应用程序重新启动之前进行更改.
我通过Kestrel和ASP.NET核心模块在IIS上托管我的ASP.NET Core 2应用程序.通过我有一个全球政策,需要经过身份验证的用户.不会提示用户输入凭据,而是通过集成Windows身份验证对用户进行身份验证.以下是我的应用程序配置的片段,涉及服务器主机配置,身份验证和授权:AuthorizeFilter
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)
验证配置
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)
{
"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角色更改时,我的应用程序将反映其当前角色?
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |