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

Freeradius REST模块传递全部请求属性至计费载荷的技术问询

在FreeRADIUS REST模块中传递所有请求属性至动态计费载荷

好问题!我之前在对接FreeRADIUS的计费系统时也碰到过完全一样的需求——要让REST模块自动适配连接/断开等不同请求类型的属性集合,不用手动逐个配置字段。下面分享两种经过验证的实现方式:

方法1:用%{*}通配符快速生成键值对载荷

FreeRADIUS的REST模块原生支持%{*}这个特殊占位符,它会自动遍历当前请求的所有属性,生成key=value格式的键值对字符串,完美适配不同请求类型的属性差异(比如连接请求带Acct-Status-Type=Start,断开请求带Acct-Status-Type=Stop,还有各自专属的属性)。

配置示例:

rest accounting_rest {
    uri = "http://your-billing-api.com/process-acct"
    method = post
    # 直接用%{*}输出所有请求属性的键值对
    data = "%{*}"
    # 如果需要表单编码格式,设置对应的Content-Type
    content_type = "application/x-www-form-urlencoded"
}

这种方式最简洁,适合API接收表单编码数据的场景。如果你的API需要其他格式,可以看下面的方法。

方法2:通过模板生成JSON格式的全属性载荷

如果你的后端API要求JSON格式的请求体,可以结合FreeRADIUS的模板功能,遍历所有请求属性生成动态JSON。

首先在配置文件中定义一个JSON模板:

template json full_acct_payload {
    type = json
    string = "{
        %{expand:%{foreach attribute in request}
        \"%{attribute}\": \"%{%{attribute}}\"%{if not last},%{endif}
        %{end}}
    }"
}

然后在REST模块中引用这个模板:

rest accounting_rest {
    uri = "http://your-billing-api.com/process-acct-json"
    method = post
    data = "%{template:full_acct_payload}"
    content_type = "application/json"
}

这个模板会自动遍历当前请求的所有属性,把它们转换成JSON键值对,而且会根据请求类型自动调整内容——比如断开请求里的Acct-Terminate-Cause属性只会在对应请求中出现,不会出现在连接请求的载荷里。

额外注意事项

  • 版本兼容性:以上语法适用于FreeRADIUS 3.0及以上版本,老版本可能不支持%{*}和模板遍历语法,建议升级到稳定版。
  • 敏感属性过滤:如果有些敏感属性(比如User-Password)不想传递给API,可以在REST模块中添加exclude参数过滤:
    rest accounting_rest {
        # ...其他配置
        exclude = "User-Password, NAS-Password, Tunnel-Password"
    }
    
  • 调试验证:配置完成后,可以用radclient发送测试请求,然后启动FreeRADIUS调试模式(radiusd -X),查看生成的请求载荷是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:15