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

FreeRadius:能否将客户端认证延迟至外部系统实现人工确认?

FreeRadius 实现管理员人工确认的延迟认证方案

FreeRadius完全支持将认证请求延迟到外部系统进行人工确认,这可以通过它的模块化扩展能力轻松实现,正好匹配你工业局域网里需要管理员审核新接入设备的场景。

核心实现逻辑

利用FreeRadius的自定义脚本模块(如rlm_perl、rlm_python或shell脚本),拦截RADIUS认证请求,把设备MAC地址、接入端口等关键信息推送到你的管理员UI系统,暂停认证流程直到管理员在UI上完成确认操作,再返回最终的认证结果。

具体步骤

  • 拦截认证请求:在FreeRadius的站点配置(sites-available/default)的authenticate阶段添加自定义模块调用,触发脚本将请求数据同步到管理员后台。
  • 等待人工确认:脚本中实现阻塞逻辑,通过本地消息队列(如Redis)或数据库监听管理员的确认指令,设置合理的超时时间(比如5分钟),避免RADIUS请求超时失效。
  • 返回认证结果:收到管理员的“允许”或“拒绝”指令后,脚本向FreeRadius返回对应状态,完成认证流程。

关键配置与代码示例

1. 启用rlm_perl模块

在radiusd.conf中添加以下配置:

perl {
    module = /etc/raddb/perl/device_approval.pl
}

2. 修改认证流程

在sites-available/default的authenticate段加入:

authenticate {
    perl
}

3. Perl脚本核心逻辑

use Redis;
use strict;

# 连接本地Redis作为消息中间件
my $redis = Redis->new(server => '127.0.0.1:6379');

# 获取请求中的关键信息:设备MAC、会话ID
my $mac_addr = $RAD_REQUEST{'Calling-Station-Id'};
my $session_id = $RAD_REQUEST{'Acct-Session-Id'};

# 将认证请求推送到管理员UI的待审核队列
$redis->lpush('pending_auths', "$session_id|$mac_addr");

# 阻塞等待管理员确认,超时300秒
my $timeout = 300;
my $approval_status;
while ($timeout-- > 0) {
    $approval_status = $redis->get("auth_result:$session_id");
    last if defined $approval_status;
    sleep(1);
}

# 根据确认结果返回认证状态
if ($approval_status && $approval_status eq 'approved') {
    return RLM_MODULE_OK;
} else {
    return RLM_MODULE_REJECT;
}

注意事项

  • 超时协调:调整FreeRadius的全局timeout参数(可设为300秒),确保脚本的等待超时小于RADIUS请求超时,避免请求提前被丢弃。
  • 可靠性保障:管理员UI和消息中间件要部署在工业局域网内,确保低延迟和高可用,避免认证请求丢失。
  • 权限控制:管理员UI要限制只有已登录的授权人员才能操作确认,避免误操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:48:24