【问题标题】:Adding DelegatingHandler to Owin OAuthAuthorizationServer将 DelegatingHandler 添加到 Owin OAuthAuthorizationServer
【发布时间】:2015-03-09 19:17:18
【问题描述】:

我创建了一个自定义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
        );
    }
}

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

【问题讨论】:

  • 不能创建一个 IAuthorizationFilter 并全局添加吗?
  • ActionFilters 是一个 MVC/WebAPI 概念。我认为 OAuth2 中间件(OAuthAuthorizationServerProvider)甚至在到达上层框架之前就拦截了请求。

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


【解决方案1】:

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

关于 OWIN 中间件,我的搜索第一次命中,GitHub 上的一个 repo 是名为 HttpTrackingMiddleware 的项目: https://github.com/springcomp/HttpTrackingMiddleware ,看起来很有希望。

总而言之,您有多种选择:OWIN 中间件、提供程序或几乎尝试在最后的手段在以下位置注册您的处理程序:

GlobalConfiguration.Configuration.MessageHandlers.Add(new CheckIpMessageHandler());

祝你好运!

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 2014-08-01
    • 2016-12-07
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多