我正在使用ASP.NET web api構建一個RESTful web服務。我有2個控制器,一個控制器我想使用基本身份驗證,另一個控制器我想使用基於令牌的身份驗證。這可能嗎?不同的身份驗證機制爲不同的asp.net web api控制器
感謝, 普拉迪普
我正在使用ASP.NET web api構建一個RESTful web服務。我有2個控制器,一個控制器我想使用基本身份驗證,另一個控制器我想使用基於令牌的身份驗證。這可能嗎?不同的身份驗證機制爲不同的asp.net web api控制器
感謝, 普拉迪普
我結束了創建兩個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) }
);
}
看一看在網頁API v2的新身份驗證篩選器。它們專門用於使用身份驗證方法註釋控制器或操作。
您可以直接在控制器中實施身份驗證方法 - 或者使用OWIN/Katana回撥身份驗證中間件。
看到這裏的基本身份驗證的中間件: https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/source/Thinktecture.IdentityModel.Owin/Basic%20Authentication
這在我看來是更好的解決方案,而不是使用過濾器。我也這樣做。我爲每個路由設置了處理程序。驗證應該在處理程序而不是過濾器中完成。 – HelloWorld