我正在使用ASP.NET web api构建RESTful Web服务。我有2个控制器,一个控制器我想使用Basic auth,而另一个控制器我想使用基于令牌的验证。这可能吗?
感谢, 普拉迪普
答案 0 :(得分:3)
查看Web API v2中的新身份验证过滤器。它们专门用于使用身份验证方法注释控制器或操作。
您可以将身份验证方法直接实施到控制器中 - 或者使用OWIN / Katana回调身份验证中间件。
请参阅此处获取基本身份验证中间件: https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/source/Thinktecture.IdentityModel.Owin/Basic%20Authentication
答案 1 :(得分:2)
我最终创建了两个MessageHandler。一个做基本身份验证,另一个做基于令牌的身份验证。然后我设置了每个路由的消息处理,如下所示:
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) }
);
}