我创建了一个自定义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
);
}
}
这不会将处理程序注册到管道中。 感谢
答案 0 :(得分:1)
如果可行,您可以应用IP地址的白名单/黑名单,例如通过覆盖OAuthAuthorizationServerProvider
- 方法拦截ValidateTokenRequest
实施中的请求时。无论哪种方式,您都可以将当前的委托处理程序重构为OWIN中间件组件,该组件在访问任何后续层或您的提供程序之前执行 - 或者重复使用前述提供程序中的适用部分。
关于OWIN中间件,我的搜索首次点击,GitHub上的回购是名为HttpTrackingMiddleware的项目: https://github.com/springcomp/HttpTrackingMiddleware,看起来很有希望。
总而言之,您可以在这里找到几个选项:OWIN中间件,提供商或者您最后一次尝试注册处理程序:
GlobalConfiguration.Configuration.MessageHandlers.Add(new CheckIpMessageHandler());
祝你好运!