2016-05-16 107 views
3

我有一个自定义授权过滤器,用于检查保存在数据库中的令牌的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,所以我只需要在使用我的自定义属性时覆盖它。

谢谢

回答

-3

不要使用过滤器,而是将您的逻辑移入授权中间件。确保它不是自动的,例如请参阅JWT middleware

然后,在您要使用它的控制器上,您可以使用specify the middleware scheme,因此cookie中间件不会启动,并且您不会收到任何重定向。

+0

我很欣赏答案,但它并不能真正解决问题。那么你应该在授权过滤器中做什么呢? –

+0

我正在阅读这个主题https://github.com/aspnet/Mvc/issues/4233,似乎他们实际上打算删除RC2上的属性 –

+0

JWT中间件处理身份验证,而不是授权,这是操作的目标后。我正在寻找相同的内容,但找不到可行的解决方案来处理.NET Core中的授权 – Keith