本篇博文中展示瞭如何在ASP.NET Core應用程式中設定IP白名單驗證的3種方式。
你可以使用一下3種方式:
-
使用中介軟體檢查每個請求的遠端IP地址
-
使用Action過濾器為指定的Controller或action方法新增針對遠端IP地址的檢查
-
使用IPageFilter為Razor Pages應用新增針對遠端IP地址的檢查
檢視專案原始碼
白名單
這裡為了簡化程式碼,我們將IP白名單串列放置在配置檔案appSettings.json中,每個IP之間使用分號分隔。
正式專案中,可以將這個串列儲存在資料庫中,便於管理
這裡我們首先新增一個中介軟體AdminSafeListMiddleware
。
程式碼解釋:
這裡在
AdminSafeListMiddleware
的建構式中,我們傳入了從配置檔案中讀取的IP白名單串列當請求進入當前中介軟體時,我們使用當前請求背景關係的
context.Connection.RemoteIpAddress
獲取到了客戶端的IP如果客戶端IP存在於IP白名單串列中,就執行下一個中介軟體,否則就直接傳回401狀態碼。
這裡原始碼中,只過濾了非GET請求,如果針對GET請求也需要啟動IP白名單,可以去掉這個判斷
然後我們需要在Startup.cs檔案的Configure
方法中將中介軟體新增到ASP.NET Core的中介軟體管道中。
使用Action過濾器
如果你只是希望為某些特性的Controller或Action方法新增IP白名單,你可以使用Action過濾器。
這裡我們首先新增一個新類ClientIdCheckFilter
, 它繼承自ActionFilterAttribute
這裡程式碼邏輯和前面中間的基本一樣,主要的區別是
這裡我們是從IP白名單,我們是從
IConfiguration
物件中手動獲取的這裡我們複寫了
OnActionExecuting
方法,如果當前客戶端 IP存在於白名單中,我們就呼叫基類OnActionExecuting
方法,執行當前Action請求,否則就傳回一個401狀態碼這裡沒有針對請求型別的判斷,所以指定當前過濾器的Action,GET請求也會受到白名單的限制
第二步,我們需要將這action過濾器新增到服務容器中。
ServiceFilter
特性,傳入的引數是我們之前定義好的ClientIdCheckFilter
。
例:
使用IPageFilter
Razor Pages應用是ASP.NET Core 2.0中新引入的功能,它是ASP.NET Core Mvc的一個子集。
如果希望Razor Pages應用支援IP白名單,我們需要建立一個新類ClientIdCheckPageFilter
, 它實現了IPageFilter
介面.
這裡的程式碼實現和IActionFilter的實現基本一樣,唯一的區別是程式碼放在了
OnPageHandlerExecuting
的實現中。
第二步,我們還是需要將ClientIdCheckPageFilter
新增到MVC的過濾器集合中。
總結
本篇我們講解了在ASP.NET Core中啟用IP白名單驗證的3種方式
-
使用中介軟體檢查每個請求的遠端IP地址
-
使用Action過濾器為指定的Controller或action方法新增針對遠端IP地址的檢查
-
使用IPageFilter為Razor Pages應用新增針對遠端IP地址的檢查
.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com