Asp.Net Core 允许 CORS 中的 IP 范围

Posted

技术标签:

【中文标题】Asp.Net Core 允许 CORS 中的 IP 范围【英文标题】:Asp.Net Core allow IP ranges in CORS 【发布时间】:2019-08-19 06:01:44 【问题描述】:

我正在使用标准的 ASP.NET Core 中间件,并且我希望允许 IP 地址范围(在我的情况下,我正在寻找私有 IP 地址范围)以简化开发。

目前,我的中间件是这样的:

app.UseCors(builder =>
    builder.WithOrigins("http://localhost:8080", "https://test-env.com")
           .AllowAnyHeader()
           .AllowAnyMethod());

但现在我想添加一系列 IP,例如172.16.0.0–172.31.255.255,采用 CIDR 表示法 172.16.0.0/12。我该怎么做?

我尝试了以下方法,但似乎都不起作用:

http://172.16.0.0/12:4200 http://172.16.*.*:4200 http://172.16.*:4200

【问题讨论】:

您的最终解决方案是什么?我很乐意允许所有给定的 IP 范围。 【参考方案1】:

ASP.NET Core 2.0 引入了使用 SetIsOriginAllowed 方法完全控制如何验证源的能力。这是一个如何配置的示例:

app.UseCors(builder =>
    builder.SetIsOriginAllowed(MyIsOriginAllowed) 
           .AllowAnyHeader()
           .AllowAnyMethod());

// ...

private static bool MyIsOriginAllowed(string origin)

    var isAllowed = false;

    // Your logic.

    return isAllowed;

传入SetIsOriginAllowed 的回调是Func<string, bool> 类型,对于允许的来源,预计返回true,否则返回false

就针对范围本身进行验证而言,还有另一个可能有用的答案:How to see if an IP address belongs inside of a range of IPs using CIDR notation?。

【讨论】:

以上是关于Asp.Net Core 允许 CORS 中的 IP 范围的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS)

asp.net core 系列之允许跨域访问-1(Enable Cross-Origin Requests:CORS)

如何在ASP NET Core中实现CORS跨域

asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)

ReactJS/ASP.Net Core 2.1 版本 CORS 错误

IIS 中 ASP.NET Core 中的 CORS