学习和测试WebApi项目限制客户端ip访问接口(基于中间件)

WebApi项目需要限制仅允许有限的客户端访问接口,百度相关内容,网上很多介绍WebApi接口IP限流的文章,稍微调整就能用于限制IP访问,微软官网中也有文章介绍客户端 IP 安全列表(参考文献1),可以通过中间件、过滤器等多种方式实现IP访问限制,本文学习和测试基于中间件实现WebApi接口限制客户端ip访问的基本用法。
  基于中间件做IP限制,需要自定义中间件类,每次客户端访问前都会调用该中间件,从中间件中获取客户端访问IP并判断是否在指定的IP集合中,在的话允许访问接口,否则直接返回错误信息。
  自定义中间件类的代码及其在program.cs文件中的使用方式如下所示:

csharp 复制代码
// 自定义中间件类
public class IpFilterMiddleware
{
    private readonly RequestDelegate _next;
    private readonly string[] _allowedIps;

    public IpFilterMiddleware(RequestDelegate next, IConfiguration config)
    {
        _next = next;
        _allowedIps = config.GetSection("AllowedIps").Get<string>().Split(','); 
    }

    public async Task Invoke(HttpContext context)
    {
        var clientIp = context.Connection.RemoteIpAddress?.ToString(); 址
        if (_allowedIps.Contains(clientIp))
        {
            await _next(context); 
        }
        else
        {
            context.Response.StatusCode = 403; // 返回403 Forbidden状态码
            await context.Response.WriteAsync("客户端IP禁止访问WebApi接口"); 
        }
    }
}

//使用中间件类
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseMiddleware<IpFilterMiddleware>();//使用中间件类

app.UseWebSockets();

实现上面的代码后,客户端调用WebApi接口时即在IpFilterMiddleware中进行IP过滤,禁止访问的效果如下图所示:

参考文献:

1\]https://learn.microsoft.com/zh-cn/aspnet/core/security/ip-safelist?view=aspnetcore-9.0 \[2\]https://blog.csdn.net/sd7o95o/article/details/145102403

相关推荐
亿牛云爬虫专家15 小时前
Go爬虫进阶:如何优雅地在Colly框架中实现无缝代理切换?
爬虫·中间件·golang·爬虫代理·colly框架·代理切换·api提取
SuperherRo18 小时前
服务攻防-中间件安全&Apache&Tomcat&Jetty&Weblogic&AJP协议&反序列化&CVE漏洞
中间件·tomcat·apache·jetty·weblogic
空中海19 小时前
第四篇:进阶篇 — 缓存、消息队列、安全与常用中间件
安全·缓存·中间件
逍遥德2 天前
MQTT教程详解-03. 高级知识点
java·物联网·中间件·信息与通信·iot·iotdb
前端小超人rui2 天前
【Node.js Express中间件理解及中间件分类和作用】
中间件·node.js·express
前端小超人rui2 天前
封装Express 自定义中间件
中间件·node.js·express
weixin_419658312 天前
RabbitMQ 应用问题
java·分布式·中间件·rabbitmq
z小天才b2 天前
Django ORM、中间件与信号 — 完全指南
python·中间件·django
fuquxiaoguang2 天前
金蝶天燕AMDC:当企业级缓存遇见Redis 8.2,国产中间件的“性能+易用”双飞跃
redis·缓存·中间件
亚空间仓鼠2 天前
Kubernetes技术入门与实践(三):构建高效中间件服务
中间件·容器·kubernetes