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

如何為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)

    分享創造快樂