【发布时间】:2013-12-23 03:42:08
【问题描述】:
我正在使用 ASP.NET web api 构建一个 RESTful web 服务。我有 2 个控制器,一个控制器我想使用基本身份验证,另一个控制器我想使用基于令牌的身份验证。这可能吗?
谢谢, 普雷迪普
【问题讨论】:
标签: asp.net authentication asp.net-web-api
我正在使用 ASP.NET web api 构建一个 RESTful web 服务。我有 2 个控制器,一个控制器我想使用基本身份验证,另一个控制器我想使用基于令牌的身份验证。这可能吗?
谢谢, 普雷迪普
【问题讨论】:
标签: asp.net authentication asp.net-web-api
查看 Web API v2 中的新身份验证过滤器。它们专门用于使用身份验证方法注释控制器或操作。
您可以直接在控制器中实现身份验证方法 - 或者使用 OWIN/Katana 回调身份验证中间件。
请参见此处了解基本身份验证中间件: https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/source/Thinktecture.IdentityModel.Owin/Basic%20Authentication
【讨论】:
ClaimsAuthorizationManager 查看身份验证类型的答案。我想使用身份验证过滤器是一个更清洁的解决方案。
我最终创建了两个 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) }
);
}
【讨论】: