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

NetBox配置AD认证失败求助:无法映射用户名到DN

NetBox配置AD认证失败:无法将用户名映射到DN

我在NetBox中尝试配置AD认证,采用官方提供的LDAP-AD认证示例配置,具体代码如下:

import ldap
from django_auth_ldap.config import LDAPSearch, NestedGroupOfNamesType
 
# 服务器URI
AUTH_LDAP_SERVER_URI = "ldaps://ip_address:port"
 
# 绑定Active Directory时可能需要以下配置
AUTH_LDAP_CONNECTION_OPTIONS = {
    ldap.OPT_REFERRALS: 0
}
 
# 设置NetBox服务账号的DN和密码
AUTH_LDAP_BIND_DN = "CN=NetBoxAdmin,OU=System,OU=Admin,DC=domain,DC=de"
AUTH_LDAP_BIND_PASSWORD = "a secret"
 
# 如果需要忽略证书错误可启用此配置(比如接受自签名证书)
# 注意这是NetBox专属配置,对应设置:
#   ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
LDAP_IGNORE_CERT_ERRORS = True
 
# 如果需要通过服务器上的CA证书目录验证LDAP服务器证书,启用此配置
# 注意这是NetBox专属配置,对应设置:
#     ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, LDAP_CA_CERT_DIR)
# LDAP_CA_CERT_DIR = '/etc/ssl/certs'
 
# 如果需要通过自定义CA验证LDAP服务器证书,启用此配置
# 注意这是NetBox专属配置,对应设置:
#     ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, LDAP_CA_CERT_FILE)
# LDAP_CA_CERT_FILE = '/path/to/example-CA.crt'
 
# 此搜索用于匹配sAMAccountName与输入用户名一致的用户,当用户用户名不在DN中时(如Active Directory)必须配置
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "OU=Admin,DC=domäne,DC=de",
    ldap.SCOPE_SUBTREE,
    "(|(userPrincipalName=%(user)s)(sAMAccountName=%(user)s))"
)
 
# 如果可通过用户名生成用户DN,则无需搜索
AUTH_LDAP_USER_DN_TEMPLATE = None
 
# 将LDAP用户属性映射到Django属性
AUTH_LDAP_USER_ATTR_MAP = {
    "username": "sAMAccountName",
    "email": "mail",
    "first_name": "givenName",
    "last_name": "sn",
}
 
AUTH_LDAP_USER_QUERY_FIELD = "username"
 
# 此搜索应返回用户所属的所有组,django_auth_ldap用它来确定组层级
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "OU=Human,OU=Admin,DC=domain,DC=de",
    ldap.SCOPE_SUBTREE,
    "(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = NestedGroupOfNamesType()
 
# 定义登录所需的组
AUTH_LDAP_REQUIRE_GROUP = "CN=NetBox,OU=Human,OU=Admin,DC=domain,DC=de"
 
# 同步LDAP组分配
AUTH_LDAP_MIRROR_GROUPS = True
 
# 通过组定义特殊用户类型,分配超级用户权限时需格外谨慎
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_active": "cn=active,ou=groups,dc=example,dc=com",
    "is_staff": "cn=staff,ou=groups,dc=example,dc=com",
    "is_superuser": "CN=NetBox,OU=Human,OU=Admin,DC=domain,DC=de"
}
 
# 如需更细粒度的权限,可将LDAP组映射到Django组
AUTH_LDAP_FIND_GROUP_PERMS = True
 
# 缓存组信息1小时以减少LDAP流量
AUTH_LDAP_CACHE_TIMEOUT = 3600
AUTH_LDAP_ALWAYS_UPDATE_USER = True

使用账号登录时出现错误:
登录错误截图

开启django_auth_ldap错误日志后,仅得到以下信息:

Authentication failed for usertest: failed to map the username to a DN.

我已使用相同的URI和绑定账号通过ldapsearch工具完成LDAPS请求,验证LDAP配置无误。NetBox服务器及Nginx服务器均未使用自签名证书。

当前使用的版本信息:

  • NetBox v3.6.5
  • Python v3.10.12
  • Linux Ubuntu 22.04.4 LTS (Jammy)

请问如何解决这个问题?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:19:50