You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ASP.NET MVC的Startup.cs文件中,重定向验证是否支持通配符?

解决NWebSec重定向验证中动态子域名的问题

NWebSec的AllowedDestinations方法不支持通配符,所以直接用https://*.abc.com/配置无效。以下是几种无需关闭验证的可行方案:

  • 自定义子域名验证逻辑
    通过AllowRedirectsTo方法传入自定义委托,手动校验重定向URL的主机是否属于目标域名的子域名,同时保留HTTPS要求:

    app.UseRedirectValidation(options =>
    {
        options.AllowRedirectsTo(uri => 
        {
            return uri.Scheme == Uri.UriSchemeHttps && 
                   (uri.Host.Equals("abc.com", StringComparison.OrdinalIgnoreCase) || 
                    uri.Host.EndsWith(".abc.com", StringComparison.OrdinalIgnoreCase));
        });
        options.AllowSameHostRedirectsToHttps();
    });
    

    这个逻辑会允许所有abc.com的一级/二级子域名(包括动态生成的),同时强制使用HTTPS协议。

  • 预注册已知子域名(限固定场景)
    如果动态子域名是有限的已知集合,可直接将所有可能的子域名添加到允许列表:

    app.UseRedirectValidation(options =>
    {
        options.AllowedDestinations(
            "https://sub1.abc.com/",
            "https://sub2.abc.com/",
            "https://sub3.abc.com/"
        );
        options.AllowSameHostRedirectsToHttps();
    });
    

    注意:此方案仅适用于子域名数量固定、可提前枚举的场景。

  • 通过配置文件管理允许的域名后缀
    将允许的域名后缀存入配置文件(如appsettings.json),便于后续维护:

    {
      "AllowedRedirectDomains": ["abc.com"]
    }
    

    然后在代码中读取配置并实现通用验证逻辑:

    var allowedDomains = Configuration.GetSection("AllowedRedirectDomains").Get<string[]>();
    
    app.UseRedirectValidation(options =>
    {
        options.AllowRedirectsTo(uri => 
        {
            if (uri.Scheme != Uri.UriSchemeHttps) return false;
            
            return allowedDomains.Any(domain => 
                uri.Host.Equals(domain, StringComparison.OrdinalIgnoreCase) || 
                uri.Host.EndsWith($".{domain}", StringComparison.OrdinalIgnoreCase));
        });
        options.AllowSameHostRedirectsToHttps();
    });
    

    这种方式无需修改代码即可扩展允许的域名范围。

内容的提问来源于stack exchange,提问作者Ruchita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:52:19