问题描述
我有一个 ASP.NET Core 5 MVC 应用程序,它使用带有 CookieAuthentication
的 Active Directory。
它是这样设置的:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(config => {
// Requiring authenticated users on the site globally
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new Authorizefilter(policy));
})
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix,options => options.ResourcesPath = "Resources")
.AddDataAnnotationsLocalization();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options => {
options.Cookie.Name = cookiesConfig.CookieName;
options.LoginPath = cookiesConfig.LoginPath;
options.logoutPath = cookiesConfig.logoutPath;
options.AccessDeniedpath = cookiesConfig.AccessDeniedpath;
options.ReturnUrlParameter = cookiesConfig.ReturnUrlParameter;
options.ExpireTimeSpan = TimeSpan.FromSeconds(cookiesConfig.TokenExpireInSeconds);
options.SlidingExpiration = true;
});
// policies are added in the account controller,after a valid login
services.AddAuthorization(options => {
options.AddPolicy("Require.Ldap.User",policy =>
policy.RequireClaim("ENABLED_USER","true")
.AddAuthenticationSchemes(CookieAuthenticationDefaults.AuthenticationScheme)
);
});
}
在控制器中,我使用标准的 [Authorize]
装饰器:
[Authorize(Policy = "Require.Ldap.User",AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
现在,所有这些都非常有效,如果您未经授权,它会将您发送回登录页面,直到我开始处理 ajax 请求和自定义组件。
我正在使用 DevExpress 组件,它提供弹出窗口、网格和其他东西。
这个组件的问题在于它们没有提供任何方式来处理 xhr 请求结果(401、500、503 等,除非您完全在 javascript 中初始化它们,这不是我们的目的,因为我们正在使用他们的 MVC用于构建 UI 的 Fluent Helpers)。
让我们假设用户登录到应用程序然后离开 30 分钟并且令牌已过期。
因此,例如,如果我有一个按钮可以打开带有一些网格或表单的 Devexpress 弹出窗口,并且它们发出 ajax 请求以获取数据(即网格:获取记录列表,表单:获取组合框的记录)这是表单的一部分)但会话已过期,组件崩溃了,我可以捕获错误,但我无法获得任何信息(无论是 401 未授权还是 500 内部服务器错误,或者只是一个 js 错误) 但我最多只能显示错误,因为我无法确定它是否是未经授权的请求。
正确的行为是,如果组件执行 401 未经授权,它会将您重定向到登录。但这不会发生,弹出窗口或任何组件只是挂在那里而不提供反馈。
现在,我正在考虑覆盖 AuthenticationFilter
以重定向任何未经授权的登录请求,但我什至不知道这是否是正确的解决方案。
你能告诉我在 ASP.NET Core 中如何覆盖授权以捕获 401 并强制重定向吗?
或者您有更好的解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)