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

Freeradius 3对接Active Directory:如何支持UPN登录方式?

解决Freeradius 3.0支持UPN格式登录并提取CN用于认证的问题

核心问题分析

你已经通过LDAP过滤器成功匹配到UPN对应的用户DN,但MSCHAP认证需要正确的用户标识(如CN或sAMAccountName)而非原始UPN,因此需要在认证流程中提取并替换用户名。

步骤1:配置LDAP模块返回用户属性

修改mods-available/ldap配置文件,添加需要提取的用户属性,确保LDAP查询后能获取到CN等关键值:

ldap {
    # 保留原有其他配置
    # 指定要返回的AD用户属性
    attributes = cn, sAMAccountName, userPrincipalName
    # 你的原有过滤器保持不变
    filter = "(|(cn=%{Stripped-User-Name})(userPrincipalName=%{User-Name}))"
}

修改后执行命令启用配置:

ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/

步骤2:在Authorize阶段替换用户名

在sites-available/default和sites-available/inner-tunnel的authorize段中,添加逻辑:当通过UPN匹配到用户后,将认证用的用户名替换为CN,确保MSCHAP能正确对接AD:

authorize {
    # 保留原有模块(如eap、ldap等)
    ldap

    # 提取CN并替换认证用户名
    if (&LDAP-CN && (&User-Name !~ /^%{LDAP-CN}@/)) {
        update request {
            # 将无域名的纯用户名设置为CN
            Stripped-User-Name := "%{LDAP-CN}"
            # 将完整用户名设置为CN@域名,保持格式一致
            User-Name := "%{LDAP-CN}@%{Realm}"
        }
    }

    # 可选:若AD更适配sAMAccountName,可替换为以下逻辑
    # if (&LDAP-sAMAccountName && (&User-Name !~ /^%{LDAP-sAMAccountName}@/)) {
    #     update request {
    #         Stripped-User-Name := "%{LDAP-sAMAccountName}"
    #         User-Name := "%{LDAP-sAMAccountName}@%{Realm}"
    #     }
    # }
}

步骤3:验证配置并调试

  1. 重启Freeradius服务:
systemctl restart freeradius
  1. 开启调试模式查看流程:
radiusd -X
  1. 使用UPN格式登录,观察日志中authorize阶段后,Stripped-User-Name和User-Name是否被替换为正确的CN值,同时确认MSCHAP认证环节是否正常通过。

内容的提问来源于stack exchange,提问作者Jim Björklund

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:10:17