歡迎光臨
每天分享高質量文章

如何為ASP.NET Core設定客戶端IP白名單驗證

本篇博文中展示瞭如何在ASP.NET Core應用程式中設定IP白名單驗證的3種方式。

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

  • 使用中介軟體檢查每個請求的遠端IP地址

  • 使用Action過濾器為指定的Controller或action方法新增針對遠端IP地址的檢查

  • 使用IPageFilter為Razor Pages應用新增針對遠端IP地址的檢查

檢視專案原始碼

白名單

這裡為了簡化程式碼,我們將IP白名單串列放置在配置檔案appSettings.json中,每個IP之間使用分號分隔。

正式專案中,可以將這個串列儲存在資料庫中,便於管理

使用中介軟體檢查每個請求的遠端IP地址

這裡我們首先新增一個中介軟體AdminSafeListMiddleware

程式碼解釋:

  • 這裡在AdminSafeListMiddleware的建構式中,我們傳入了從配置檔案中讀取的IP白名單串列

  • 當請求進入當前中介軟體時,我們使用當前請求背景關係的context.Connection.RemoteIpAddress獲取到了客戶端的IP

  • 如果客戶端IP存在於IP白名單串列中,就執行下一個中介軟體,否則就直接傳回401狀態碼。

  • 這裡原始碼中,只過濾了非GET請求,如果針對GET請求也需要啟動IP白名單,可以去掉這個判斷

然後我們需要在Startup.cs檔案的Configure方法中將中介軟體新增到ASP.NET Core的中介軟體管道中。

註意: 這裡我們在註冊中介軟體的時候,傳入了從配置檔案中讀取的IP白名單。

使用Action過濾器

如果你只是希望為某些特性的Controller或Action方法新增IP白名單,你可以使用Action過濾器。

這裡我們首先新增一個新類ClientIdCheckFilter, 它繼承自ActionFilterAttribute

這裡程式碼邏輯和前面中間的基本一樣,主要的區別是

  • 這裡我們是從IP白名單,我們是從IConfiguration物件中手動獲取的

  • 這裡我們複寫了OnActionExecuting方法,如果當前客戶端 IP存在於白名單中,我們就呼叫基類OnActionExecuting方法,執行當前Action請求,否則就傳回一個401狀態碼

  • 這裡沒有針對請求型別的判斷,所以指定當前過濾器的Action,GET請求也會受到白名單的限制

第二步,我們需要將這action過濾器新增到服務容器中。

第三步,我們可以在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

    贊(0)

    分享創造快樂