生活随笔
收集整理的這篇文章主要介紹了
Asp.Net Core 中如何设置 IP 白名单
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
咨詢區
我想在一個web站點中實現ip白名單功能,在 MVC 時代我只需要在 web.config 中添加如下配置即可。
<security><ipSecurity?allowUnlisted="false"?denyAction="NotFound"><add?allowed="true"?ipAddress="XX.XX.XX.XX"?subnetMask="255.255.255.0"/></ipSecurity>
</security>
但在 AspNetCore 中使用如上配置時,程序啟動就會報錯。
Unable?to?start?process?The?web?server?request?failed?with?status?code?500,?internal?server?error
很顯然這個 config 配置是有問題的,請問是否有內置或者第三方的組件來實現這個功能?
回答區
Damian Bod 寫了一篇文章:https://damienbod.com/2016/12/18/implementing-a-client-white-list-using-asp-net-core-middleware/ 來演示如果通過中間件的方式來實現 ip 白名單功能。
他分別給了一個 全局性中間件 和 actionfilter 兩種方式來實現,無論哪種方式都需要在 appsetttings.json 中配置可允許訪問的 ip 列表,然后根據這個list來檢查客戶端的ip是否符合?client ip 可以通過 context.Connection.RemoteIpAddress 來獲取。
如果你有更精細化的配置,比如說設置ip段,那你可以通過nuget上的 IPAddressRange 包來實現,它支持了多種格式,如:192.168.0.0/24 和 192.168.0.0/255.255.255.0,包括 CIDR 表達式和 IPv6。
參考下面的例子。
appsettings.json:
{"IPAddressWhitelistConfiguration":?{"AuthorizedIPAddresses":?["::1",?//?IPv6?localhost"127.0.0.1",?//?IPv4?localhost"192.168.0.0/16",?//?Local?network"10.0.0.0/16",?//?Local?network]}
}
IPWhiteListConfiguration.cs:
namespace?My.Web.Configuration
{using?System.Collections.Generic;public?class?IPWhitelistConfiguration?:?IIPWhitelistConfiguration{public?IEnumerable<string>?AuthorizedIPAddresses?{?get;?set;?}}
}
IIPWhiteListConfiguration.cs:
namespace?My.Web.Configuration
{using?System.Collections.Generic;public?interface?IIPWhitelistConfiguration{IEnumerable<string>?AuthorizedIPAddresses?{?get;?}}
}
Startup.cs:
public?class?Startup
{//?...public?void?ConfigureServices(IServiceCollection?services){//?...services.Configure<IPWhitelistConfiguration>(this.Configuration.GetSection("IPAddressWhitelistConfiguration"));services.AddSingleton<IIPWhitelistConfiguration>(resolver?=>?resolver.GetRequiredService<IOptions<IPWhitelistConfiguration>>().Value);//?...}}
ClientIPAddressFilterAttribute.cs:
namespace?My.Web.Filters
{using?System.Collections.Generic;using?System.Linq;using?System.Net;using?Microsoft.AspNetCore.Mvc;using?Microsoft.AspNetCore.Mvc.Filters;using?NetTools;using?My.Web.Configuration;public?class?ClientIPAddressFilterAttribute?:?ActionFilterAttribute{private?readonly?IEnumerable<IPAddressRange>?authorizedRanges;public?ClientIPAddressFilterAttribute(IIPWhitelistConfiguration?configuration){this.authorizedRanges?=?configuration.AuthorizedIPAddresses.Select(item?=>?IPAddressRange.Parse(item));}public?override?void?OnActionExecuting(ActionExecutingContext?context){var?clientIPAddress?=?context.HttpContext.Connection.RemoteIpAddress;if?(!this.authorizedRanges.Any(range?=>?range.Contains(clientIPAddress))){context.Result?=?new?UnauthorizedResult();}}}
}
點評區
在 website 中設置ip白名單的功能非常常見,nuget上也有很多的開源中間件幫助實現,比如:ClientIpAspNetCoreIIS,我在項目中也有用到白名單的功能,只不過是做到了 nginx 層。
總結
以上是生活随笔為你收集整理的Asp.Net Core 中如何设置 IP 白名单的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。