如何为ASP.NET Core设置客户端IP白名单验证

本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式。

你可以使用一下3种方式:

  • 使用中间件检查每个请求的远程IP地址

  • 使用Action过滤器为指定的Controller或action方法添加针对远程IP地址的检查

  • 使用IPageFilter为Razor Pages应用添加针对远程IP地址的检查


查看项目源代码

白名单

这里为了简化代码,我们将IP白名单列表放置在配置文件appSettings.json中,每个IP之间使用分号分隔。

正式项目中,可以将这个列表保存在数据库中,便于管理

640?wx_fmt=png

使用中间件检查每个请求的远程IP地址

这里我们首先添加一个中间件AdminSafeListMiddleware

640?wx_fmt=png

代码解释:

  • 这里在AdminSafeListMiddleware的构造函数中,我们传入了从配置文件中读取的IP白名单列表

  • 当请求进入当前中间件时,我们使用当前请求上下文的context.Connection.RemoteIpAddress获取到了客户端的IP

  • 如果客户端IP存在于IP白名单列表中,就运行下一个中间件,否则就直接返回401状态码。

  • 这里源代码中,只过滤了非GET请求,如果针对GET请求也需要启动IP白名单,可以去掉这个判断

然后我们需要在Startup.cs文件的Configure方法中将中间件添加到ASP.NET Core的中间件管道中。

640?wx_fmt=png

注意: 这里我们在注册中间件的时候,传入了从配置文件中读取的IP白名单。

使用Action过滤器

如果你只是希望为某些特性的Controller或Action方法添加IP白名单,你可以使用Action过滤器。

这里我们首先添加一个新类ClientIdCheckFilter, 它继承自ActionFilterAttribute

640?wx_fmt=png

这里代码逻辑和前面中间的基本一样,主要的区别是

  • 这里我们是从IP白名单,我们是从IConfiguration对象中手动获取的

  • 这里我们复写了OnActionExecuting方法,如果当前客户端 IP存在于白名单中,我们就调用基类OnActionExecuting方法,执行当前Action请求,否则就返回一个401状态码

  • 这里没有针对请求类型的判断,所以指定当前过滤器的Action,GET请求也会受到白名单的限制

第二步,我们需要将这action过滤器添加到服务容器中。

640?wx_fmt=png

第三步,我们可以在Action方法声明处添加ServiceFilter特性,传入的参数是我们之前定义好的ClientIdCheckFilter

例:

640?wx_fmt=png

使用IPageFilter

Razor Pages应用是ASP.NET Core 2.0中新引入的功能,它是ASP.NET Core Mvc的一个子集。

如果希望Razor Pages应用支持IP白名单,我们需要创建一个新类ClientIdCheckPageFilter, 它实现了IPageFilter接口.

640?wx_fmt=png

这里的代码实现和IActionFilter的实现基本一样,唯一的区别是代码放在了OnPageHandlerExecuting的实现中。

第二步,我们还是需要将ClientIdCheckPageFilter添加到MVC的过滤器集合中。

640?wx_fmt=png

总结

本篇我们讲解了在ASP.NET Core中启用IP白名单验证的3种方式

  • 使用中间件检查每个请求的远程IP地址

  • 使用Action过滤器为指定的Controller或action方法添加针对远程IP地址的检查

  • 使用IPageFilter为Razor Pages应用添加针对远程IP地址的检查


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值