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

基于ABP IO的单体应用模块间通信权限管控方案咨询

ABP IO 单体架构区分内外请求的可配置权限实现方案

1. 注入内部请求专属标识

基于ABP的C# Client Proxy扩展请求拦截逻辑,给所有模块间发起的内部请求统一注入加密的专属请求头,避免外部伪造:

  • 重写IClientProxyInterceptor接口,为所有内部请求添加X-Internal-Call请求头,值为预配置的内部通信密钥
  • 密钥存放在应用配置中,不硬编码到业务代码里
    示例代码:
public class InternalCallHeaderInterceptor : IClientProxyInterceptor
{
    private readonly IConfiguration _config;

    public InternalCallHeaderInterceptor(IConfiguration config)
    {
        _config = config;
    }

    public Task InterceptAsync(ClientProxyInterceptionContext context)
    {
        context.Headers.Add("X-Internal-Call", _config["InternalCall:AuthKey"]);
        return Task.CompletedTask;
    }
}

2. 全局请求来源识别中间件

在权限校验管道前添加全局中间件,统一识别请求来源并打标,后续所有权限逻辑都可以直接读取标记判断:

  • 校验请求头X-Internal-Call的值是否和配置的密钥一致,一致则标记为内部请求
  • 标记结果存放在HttpContext.Items中,贯穿整个请求生命周期
    示例代码:
public class InternalCallIdentifyMiddleware
{
    private readonly RequestDelegate _next;
    private readonly string _validInternalKey;

    public InternalCallIdentifyMiddleware(RequestDelegate next, IConfiguration config)
    {
        _next = next;
        _validInternalKey = config["InternalCall:AuthKey"];
    }

    public async Task InvokeAsync(HttpContext context)
    {
        context.Items["IsInternalRequest"] = 
            context.Request.Headers.TryGetValue("X-Internal-Call", out var headerVal) 
            && headerVal == _validInternalKey;
        
        await _next(context);
    }
}

3. 扩展权限校验逻辑适配双场景

基于ABP原生权限系统扩展,实现可配置的内外请求权限规则:

  • 自定义权限配置节点,支持为每个接口配置是否允许内部调用、是否允许外部调用、外部调用所需权限
  • 自定义授权过滤器,读取HttpContext.Items中的请求来源标记,匹配对应接口的权限规则做校验
    配置示例:
"PermissionRules": {
  "ProductService.GetDetail": {
    "AllowInternal": true,
    "AllowExternal": true,
    "ExternalRequiredPermission": "Product.View"
  },
  "ProductService.UpdateStock": {
    "AllowInternal": true,
    "AllowExternal": false
  }
}

4. 微服务迁移兼容处理

当前实现完全适配后续微服务架构演进:

  • 拆分为微服务后,内部服务调用仍然沿用X-Internal-Call头的校验逻辑,仅需要将密钥同步到所有微服务配置中
  • 业务层的权限校验逻辑不需要做任何修改,实现平滑迁移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:18:02