不同的asp.net web api控制器的不同认证机制

时间:2013-12-23 03:42:09

标签: asp.net authentication asp.net-web-api

我正在使用ASP.NET web api构建RESTful Web服务。我有2个控制器,一个控制器我想使用Basic auth,而另一个控制器我想使用基于令牌的验证。这可能吗?

感谢, 普拉迪普

2 个答案:

答案 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) }
        );
    }