Я создал пользовательский 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
);
}
}
Это не регистрирует обработчик в конвейере. благодаря
Если это возможно, вы можете применить white-/черный список IP -addresses, например, при перехвате запросов в реализации OAuthAuthorizationServerProvider
путем переопределения ValidateTokenRequest
-method. В любом случае, вы можете реорганизовать свой текущий обработчик делегирования в компонент промежуточного программного обеспечения OWIN, который будет выполняться перед ударом по любым последующим слоям или у вашего провайдера, или повторно использовать с соответствующими частями в пределах указанного поставщика.
Что касается промежуточного программного обеспечения OWIN, мой поиск был очень первым, и репо в GitHub было проектом под названием HttpTrackingMiddleware: https://github.com/springcomp/HttpTrackingMiddleware, который выглядит многообещающим.
В общем, у вас есть несколько вариантов: промежуточное ПО OWIN, провайдер или, по большому счету, старайтесь в последний раз зарегистрировать своего обработчика по адресу:
GlobalConfiguration.Configuration.MessageHandlers.Add(new CheckIpMessageHandler());
Удачи!