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

如何在不影响框架功能的情况下保护AbpServiceProxies/GetAll API?

解决方案

针对Abp 7.4版本中AbpServiceProxies/GetAll API未授权可访问的问题,提供以下几种安全防护方案,均不影响框架核心功能:

方案一:为ServiceProxies控制器添加全局授权

通过自定义控制器替换默认的AbpServiceProxiesController,并添加[Authorize]属性,限制仅授权用户可访问该API:

  1. 创建自定义控制器:
[Authorize]
public class CustomServiceProxiesController : AbpServiceProxiesController
{
    public CustomServiceProxiesController(
        IAspNetCoreApiDescriptionGroupCollectionProvider apiDescriptionGroupCollectionProvider, 
        IAbpApiProxyScriptGenerator apiProxyScriptGenerator) 
        : base(apiDescriptionGroupCollectionProvider, apiProxyScriptGenerator)
    {
    }
}
  1. 在模块的ConfigureServices方法中替换默认服务:
public override void ConfigureServices(ServiceConfigurationContext context)
{
    // 替换默认的ServiceProxies控制器
    context.Services.Replace(ServiceDescriptor.Transient<AbpServiceProxiesController, CustomServiceProxiesController>());
    
    // 其他配置...
}

方案二:仅返回无授权要求的公开API

如果需要保留API访问权限,但只对外暴露无[Authorize]属性的公开接口,可自定义API代理生成器过滤敏感路由:

  1. 创建自定义代理生成器:
public class RestrictedApiProxyScriptGenerator : AbpApiProxyScriptGenerator
{
    public RestrictedApiProxyScriptGenerator(IOptions<AbpApiProxyOptions> options) : base(options)
    {
    }

    protected override IEnumerable<ApiDescription> GetApiDescriptions(ApiDescriptionGroupCollection apiDescriptionGroups)
    {
        var allApiDescriptions = base.GetApiDescriptions(apiDescriptionGroups);
        
        // 过滤掉带有Authorize属性的API
        return allApiDescriptions.Where(apiDesc => 
            !apiDesc.ActionDescriptor.EndpointMetadata.Any(metadata => metadata is AuthorizeAttribute));
    }
}
  1. 在模块的ConfigureServices方法中替换服务:
public override void ConfigureServices(ServiceConfigurationContext context)
{
    context.Services.Replace(ServiceDescriptor.Transient<IAbpApiProxyScriptGenerator, RestrictedApiProxyScriptGenerator>());
    
    // 其他配置...
}

方案三:完全关闭ServiceProxies功能

如果你的项目不需要前端自动生成API代理的功能,可直接在配置文件中禁用该服务:

在appsettings.json中添加以下配置:

{
  "Abp": {
    "ApiProxy": {
      "IsEnabled": false
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:01:03