将DelegatingHandler添加到Owin OAuthAuthorizationServer

时间:2015-01-12 03:34:04

标签: c# asp.net-web-api authorization owin

我创建了一个自定义OAuthAuthorizationServerProvider,其中包含以下方法:

override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)  
override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)  
override Task TokenEndpoint(OAuthTokenEndpointContext context)    

我想添加一个自定义DelegatingHandler来阻止基于IP的访问 但我找不到任何注册处理程序的地方。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        List<DelegatingHandler> ipApi = new List<DelegatingHandler>();
        ipApi.Add(new CheckIpMessageHandler());
        var routeIpHandlers = HttpClientFactory.CreatePipeline(new HttpControllerDispatcher(config), ipApi);

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: null,
            handler: routeIpHandlers
        );
    }
}

这不会将处理程序注册到管道中。 感谢

1 个答案:

答案 0 :(得分:1)

如果可行,您可以应用IP地址的白名单/黑名单,例如通过覆盖OAuthAuthorizationServerProvider - 方法拦截ValidateTokenRequest实施中的请求时。无论哪种方式,您都可以将当前的委托处理程序重构为OWIN中间件组件,该组件在访问任何后续层或您的提供程序之前执行 - 或者重复使用前述提供程序中的适用部分。

关于OWIN中间件,我的搜索首次点击,GitHub上的回购是名为HttpTrackingMiddleware的项目: https://github.com/springcomp/HttpTrackingMiddleware,看起来很有希望。

总而言之,您可以在这里找到几个选项:OWIN中间件,提供商或者您最后一次尝试注册处理程序:

GlobalConfiguration.Configuration.MessageHandlers.Add(new CheckIpMessageHandler());
祝你好运!