如何为ASP.NET Core设置客户端IP白名单验证
本篇博文中展示了如何在ASP.NET Core應(yīng)用程序中設(shè)置IP白名單驗證的3種方式。
你可以使用一下3種方式:
使用中間件檢查每個請求的遠(yuǎn)程IP地址
使用Action過濾器為指定的Controller或action方法添加針對遠(yuǎn)程IP地址的檢查
使用IPageFilter為Razor Pages應(yīng)用添加針對遠(yuǎn)程IP地址的檢查
查看項目源代碼
白名單
這里為了簡化代碼,我們將IP白名單列表放置在配置文件appSettings.json中,每個IP之間使用分號分隔。
正式項目中,可以將這個列表保存在數(shù)據(jù)庫中,便于管理
這里我們首先添加一個中間件AdminSafeListMiddleware。
代碼解釋:
這里在AdminSafeListMiddleware的構(gòu)造函數(shù)中,我們傳入了從配置文件中讀取的IP白名單列表
當(dāng)請求進(jìn)入當(dāng)前中間件時,我們使用當(dāng)前請求上下文的context.Connection.RemoteIpAddress獲取到了客戶端的IP
如果客戶端IP存在于IP白名單列表中,就運行下一個中間件,否則就直接返回401狀態(tài)碼。
這里源代碼中,只過濾了非GET請求,如果針對GET請求也需要啟動IP白名單,可以去掉這個判斷
然后我們需要在Startup.cs文件的Configure方法中將中間件添加到ASP.NET Core的中間件管道中。
使用Action過濾器
如果你只是希望為某些特性的Controller或Action方法添加IP白名單,你可以使用Action過濾器。
這里我們首先添加一個新類ClientIdCheckFilter, 它繼承自ActionFilterAttribute
這里代碼邏輯和前面中間的基本一樣,主要的區(qū)別是
這里我們是從IP白名單,我們是從IConfiguration對象中手動獲取的
這里我們復(fù)寫了OnActionExecuting方法,如果當(dāng)前客戶端 IP存在于白名單中,我們就調(diào)用基類OnActionExecuting方法,執(zhí)行當(dāng)前Action請求,否則就返回一個401狀態(tài)碼
這里沒有針對請求類型的判斷,所以指定當(dāng)前過濾器的Action,GET請求也會受到白名單的限制
第二步,我們需要將這action過濾器添加到服務(wù)容器中。
ServiceFilter特性,傳入的參數(shù)是我們之前定義好的ClientIdCheckFilter。
例:
使用IPageFilter
Razor Pages應(yīng)用是ASP.NET Core 2.0中新引入的功能,它是ASP.NET Core Mvc的一個子集。
如果希望Razor Pages應(yīng)用支持IP白名單,我們需要創(chuàng)建一個新類ClientIdCheckPageFilter, 它實現(xiàn)了IPageFilter接口.
這里的代碼實現(xiàn)和IActionFilter的實現(xiàn)基本一樣,唯一的區(qū)別是代碼放在了OnPageHandlerExecuting的實現(xiàn)中。
第二步,我們還是需要將ClientIdCheckPageFilter添加到MVC的過濾器集合中。
總結(jié)
本篇我們講解了在ASP.NET Core中啟用IP白名單驗證的3種方式
使用中間件檢查每個請求的遠(yuǎn)程IP地址
使用Action過濾器為指定的Controller或action方法添加針對遠(yuǎn)程IP地址的檢查
使用IPageFilter為Razor Pages應(yīng)用添加針對遠(yuǎn)程IP地址的檢查
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的如何为ASP.NET Core设置客户端IP白名单验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core中的验证组件Fluen
- 下一篇: 让ASP.NET Core支持Graph