2013-12-23 39 views

回答

2

我結束了創建兩個MessageHandlers。一個做基本身份驗證,另一個做基於令牌的身份驗證。然後,我設置如下所示的按路由消息處理:

public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "BasicAuthApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { controller = "controller1" }, 
      handler: new BasicAuthMessageHandler() { InnerHandler = new HttpControllerDispatcher(config) } 
     ); 

     config.Routes.MapHttpRoute(
      name: "TokenAuthApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { controller = "controller2" }, 
      handler: new TokenAuthMessageHandler() { InnerHandler = new HttpControllerDispatcher(config) } 
     ); 
    } 
+0

這在我看來是更好的解決方案,而不是使用過濾器。我也這樣做。我爲每個路由設置了處理程序。驗證應該在處理程序而不是過濾器中完成。 – HelloWorld

3

看一看在網頁API v2的新身份驗證篩選器。它們專門用於使用身份驗證方法註釋控制器或操作。

您可以直接在控制器中實施身份驗證方法 - 或者使用OWIN/Katana回撥身份驗證中間件。

看到這裏的基本身份驗證的中間件: https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/source/Thinktecture.IdentityModel.Owin/Basic%20Authentication

+1

我刪除了基於使用'ClaimsAuthorizationManager'查看身份驗證類型的答案。我想使用認證過濾器是一個更清潔的解決方案。 – Badri

+0

感謝您指出正確的方向。我最終使用消息處理程序而不是過濾器。 – Pradeep