如何在Asp.Net核心自定义授权过滤器中返回未授权
问题描述:
我有一个自定义授权过滤器,用于检查保存在数据库中的令牌的API。所以像这样的如何在Asp.Net核心自定义授权过滤器中返回未授权
override public void OnAuthorization(AuthorizationContext context)
{
if (!context.HttpContext.Request.Headers.Keys.Contains("X-CustomToken"))
{
context.HttpContext.Response.StatusCode = 401; //Unauthorized
return;
}
var headerToken = context.HttpContext.Request.Headers
.Where(a => a.Key.ToLower() == "x-customtoken").FirstOrDefault();
var company= _repository.GetCompanyByToken(headerToken.Value);
if (company == null)
{
context.Result = new HttpStatusCodeResult(401);
return;
}
_myFactory.SetCurrentCompany(company);
}
问题是,正如我在这里问其他问题读过,它像它的前端控制器重定向到登录页面。我通常阅读的解决方案是完全覆盖此行为。不过,我的项目在同一个解决方案中有一个前端和一个API,所以我只需要在使用我的自定义属性时覆盖它。
谢谢
答
不要使用过滤器,而是将您的逻辑移入授权中间件。确保它不是自动的,例如请参阅JWT middleware。
然后,在您要使用它的控制器上,您可以使用specify the middleware scheme,因此cookie中间件不会启动,并且您不会收到任何重定向。
我很欣赏答案,但它并不能真正解决问题。那么你应该在授权过滤器中做什么呢? –
我正在阅读这个主题https://github.com/aspnet/Mvc/issues/4233,似乎他们实际上打算删除RC2上的属性 –
JWT中间件处理身份验证,而不是授权,这是操作的目标后。我正在寻找相同的内容,但找不到可行的解决方案来处理.NET Core中的授权 – Keith