2016-05-16 176 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