使用ADODB/ADSDSOObject时登录用户的Active Directory认证机制咨询
Active Directory无显式凭证查询的认证机制解析
我的系统已接入Active Directory,可通过指定用户名和密码绑定的方式查询目录信息。我发现使用ADO或ADSDSOObject Provider(已在Java/Python/VBA中测试)时,无需显式提供用户名和密码也能完成查询。我希望了解这种场景下的认证实现方式。
需显式提供凭证的示例代码
import ldap3 from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups server = Server('172.16.10.50', port=636, use_ssl=True) conn = Connection(server, 'CN=ldap_bind_account,OU=1_Service_Accounts,OU=0_Users,DC=TG,DC=LOCAL','Passw0rds123!',auto_bind=True) print(conn)
无需显式提供凭证的示例代码
Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.CommandText = "SELECT Name FROM 'LDAP://DC=mydomain,DC=com' WHERE objectClass = 'Computer'" objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute
我曾尝试查看相关库的源码,但未能理解具体实现逻辑。
认证实现方式解析
这种无需手动输入账号密码就能完成AD查询的机制,核心是Windows集成身份验证(底层依赖Kerberos或NTLM协议),具体逻辑如下:
- ADSDSOObject是微软为AD定制的OLE DB Provider,默认启用了集成身份验证模式。当调用
objConnection.Open不指定凭证时,它会自动调用系统的SSPI(安全支持提供程序接口) - SSPI会获取当前运行代码的Windows用户的安全上下文——也就是你当前登录Windows的域用户(或已通过域验证的本地用户)的身份凭证,比如Kerberos票据或NTLM哈希
- 这些凭证会被自动传递给AD服务器完成身份校验,只要当前用户本身拥有AD目录的查询权限,就能成功执行查询
- 这种方式和显式指定凭证的简单绑定不同:显式绑定是用你指定的服务账号身份完成认证,和当前登录用户无关;而集成身份验证完全复用当前用户的已验证身份
内容的提问来源于stack exchange,提问作者vivek sreekumar
相关产品推荐
相关产品推荐

