我们使用一个IAuthorizationFilter
类来过滤所有请求,并检查身份验证 cookie 中是否仍然存在自定义用户声明(多租户应用程序)。这些信息对于应用程序的其余部分是必不可少的。如果这些信息不存在,我们将重定向到登录页面。
public class TokenAuthorizationFilter : IAuthorizationFilter, IAsyncAuthorizationFilter
{
public TokenAuthorizationFilter()
{
// Some dependency injection ...
}
public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
CheckToken(context);
}
public Task OnAuthorizationAsync(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
return CheckToken(context);
}
}
我们像这样注册我们的过滤器
services.AddMvc(config =>
{
config.Filters.Add(typeof(TokenAuthorizationFilter));
});
我想要访问的控制器的操作非常简单:
[Authorize(Policy = "TokenValid")]
public class HomeController : AjaxBaseController
{
public IActionResult Index()
{
return View();
}
}
我们甚至没有达到我们的政策AuthorizeAttribute
。正如我在堆栈跟踪中看到的那样,IdentityMicrosoft.AspNet.Identity.SignInManager
在检查 a 后试图在中间件的某个地方创建一个CookieAuthenticationOptions
,我假设他正在尝试重新登录用户,但它没有检查我的 Filter 吗?登录在我们的应用程序中非常特殊,所以我不想让 Identity 自动登录我们的用户。当身份验证 cookie 过期时,我可以重现此问题。有任何想法吗 ?谢谢 !