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

Django认证从LDAP迁移至AD LDAPS遇阻及相关咨询

问题解答

1. 终端/命令行测试AD LDAPS连接的方法

可以用两种常用工具快速验证连接有效性:

  • 用openssl验证SSL握手:直接测试AD服务器的LDAPS端口能否建立加密连接,命令如下:
    openssl s_client -connect ad.yourdomain.com:636
    
    执行后若看到Verify return code: 0 (ok)类输出,说明SSL证书验证通过、连接正常;若出现超时或证书错误,对应排查防火墙规则或证书配置。
  • 用ldapsearch验证LDAP查询:测试能否通过LDAPS执行基础用户查询,命令示例:
    ldapsearch -H ldaps://ad.yourdomain.com:636 -x -b "DC=yourdomain,DC=com" "(objectClass=user)" sAMAccountName
    
    参数说明:-H指定LDAPS地址,-x启用简单绑定,-b设置搜索基础DN,末尾为查询过滤条件和需返回的属性。若能返回用户列表,说明连接与权限均正常。

2. 是否需要更换django-pyad?

不需要弃用现有django-auth-ldap代码,它完全支持AD LDAPS认证,只需调整适配AD的配置即可。重点检查以下关键项:

  • 确认SERVER_URI格式正确:必须为ldaps://ad.yourdomain.com:636(AD LDAPS默认端口为636)
  • 配置SSL证书验证:若AD使用自签名或内部CA颁发的证书,需指定CA证书路径:
    import ldap
    AUTH_LDAP_GLOBAL_OPTIONS = {
        ldap.OPT_X_TLS_CACERTFILE: "/path/to/your/ca-certificate.crt",
        ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_DEMAND,
    }
    
  • 绑定DN符合AD规范:AD绑定账号的DN格式通常为CN=绑定用户名,OU=服务账号,DC=yourdomain,DC=com,而非普通LDAP常用的uid格式
  • 用户搜索过滤适配AD:AD以sAMAccountName作为登录用户名,搜索配置应设置为:
    from django_auth_ldap.config import LDAPSearch
    AUTH_LDAP_USER_SEARCH = LDAPSearch(
        "OU=用户组,DC=yourdomain,DC=com",
        ldap.SCOPE_SUBTREE,
        "(sAMAccountName=%(user)s)"
    )
    
  • 关闭START_TLS:LDAPS是直接在636端口建立加密连接,无需开启AUTH_LDAP_START_TLS = True,建议设置为False

若调整后仍有问题,可开启django-auth-ldap调试日志排查具体错误:

import logging
logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:55:31