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

咨询支持使用当前执行账号AD凭据直通认证的Python LDAP模块

解决方案

完全支持这种直通身份验证的需求,以下是两种常用的成熟实现方案:

方案1:Windows环境优先选择pywin32的ADSI接口

该方案基于Windows原生的AD服务接口,完全复用当前执行脚本用户的AD身份上下文,和PowerShell的默认认证逻辑一致,不需要在代码中显式传递任何凭据:

import win32com.client

# 自动绑定当前域,使用当前登录用户身份完成认证
root_dse = win32com.client.GetObject("LDAP://rootDSE")
domain_nc = root_dse.Get("defaultNamingContext")
domain_conn = win32com.client.GetObject(f"LDAP://{domain_nc}")

# 示例:查询所有未禁用的域用户账号和显示名
rs = domain_conn.OpenRecordset(f"""
SELECT sAMAccountName, displayName 
FROM 'LDAP://{domain_nc}' 
WHERE objectClass='user' AND userAccountControl <> 514
""")
while not rs.EOF:
    print(f"账号:{rs.Fields('sAMAccountName').Value} | 显示名:{rs.Fields('displayName').Value}")
    rs.MoveNext()

只要当前执行脚本的域账号拥有对应AD资源的访问权限,即可直接运行,无需任何凭据配置。

方案2:使用标准LDAP协议的python-ldap包

如果需要使用通用LDAP协议操作,python-ldap在Windows环境下支持SSPI的GSSAPI认证,同样可以直通当前用户身份,不需要硬编码账号密码:

import ldap
from ldap.sasl import gssapi

# 替换为你的域控制器地址
ldap_conn = ldap.initialize("ldap://your-domain-controller.com")
# 直接使用当前用户安全上下文完成绑定,无需传入凭据
ldap_conn.sasl_interactive_bind_s("", gssapi())

# 示例:查询指定组织单元下的用户
base_dn = "ou=users,dc=example,dc=com"
result = ldap_conn.search_s(base_dn, ldap.SCOPE_SUBTREE, "(objectClass=user)", ["sAMAccountName", "name"])
for entry in result:
    print(entry)

适用前提

  • 两种方案均要求脚本运行在已加入AD域的Windows设备上,执行脚本的账号本身是已完成身份验证的有效域账号
  • 非Windows环境下需要提前配置Kerberos票证,才能实现类似的直通认证效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:45:09