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

在Laravel中使用Adldap如何获取用户密码或密码哈希?

关于通过Adldap获取Active Directory用户密码/哈希的问题

首先明确:你没办法通过常规LDAP查询获取Active Directory用户的明文密码,甚至密码哈希也很难拿到,这是AD的安全设计决定的。

为什么你的代码拿不到密码?

AD里根本不存在password这个属性,你在select里写的这个字段完全无效。AD不会存储用户的明文密码,密码哈希(比如NTLM哈希)虽有存储,但放在unicodePwd属性中,这个属性有极其严格的访问限制:

  • 必须通过LDAPS(SSL加密,端口636)连接AD,普通LDAP连接根本看不到这个属性
  • 用来绑定AD的服务账号必须拥有域级的Replicating Directory Changes和Replicating Directory Changes All权限,这两个权限默认只有域管理员能获取
  • 就算拿到unicodePwd的值,它也是用域控制器密钥加密后的密文,不是直接可用的哈希值,只有域控制器本身能解密

用户同步到本地数据库的可行方案

如果你的需求是让本地数据库用户能正常登录,别想着同步AD的密码/哈希,换这些方案更靠谱:

  • 实现单点登录:用SAML、OAuth2或者Kerberos/NTLM认证,让用户直接用AD账号登录本地系统,不用在本地存储密码
  • 让用户首次登录本地系统时重置密码,将密码存在本地数据库
  • 若非要同步哈希,只能通过域控制器系统备份、或专用域内工具提取NTLM哈希,但这属于高风险操作,违反域安全最佳实践,且需要域管理员级权限

修正你的查询代码

去掉无效的password字段,正确的查询代码如下:

$users = Adldap::search()->users()
    ->select(['cn', 'samaccountname', 'objectguid', 'mail', 'useraccountcontrol'])
    ->limit(5)
    ->get();
dd($users);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:34:55