锵锵枪 wrote:

PHP自助重置Windows AD域账号密码



公司通过 Windows活动目录 为内部各系统提供 账号、密码认证服务,系统版本为windows server 2012,但是有同事经常有密码遗忘、账号解锁的需求,于是打算弄一个自助服务的系统,对于这种琐碎的事情能自个儿处理。

这里记载搭建过程中遇到的几个坑和需要注意的点,有同样需求的朋友可以参考:

基础:

一、
安装Nginx、PHP、PHP-FPM,需要启用php_ldap扩展,直接yum安装即可。

注:后面用到的开源库,需要php7以上支持,这里可以直接安装php7

二、
AD域修改密码必须通过SSL/TLS链接,SSL基本已经废弃。通过TLS连接AD,需要在AD上安装证书服务,然后导出域服务器的CA证书,并导入到 服务器的 受信任证书办法机构里面。

否则php发起TLS连接的时候会因为证书不受信任而拒绝连接。连接的时候需要使用AD的域名进行链接。

安装配置:

一、安装Adldap2:

使用了,Github上的Adldap2(https://github.com/Adldap2/Adldap2)这个库,里面封装好了很多现成的类函数,可以直接调用,避免重复工作。

可以通过composer直接安装:composer require adldap2/adldap2

二、windows时间戳到linux时间戳的转换:

通过AD域读取到的时间需要转换成unix时间戳,转换关系: unixtime=windowstime/10000000 - 11644473600

也可以直接调用Adldap 里面的 Utilities::convertWindowsTimeToUnixTime($time)

三、鉴权用户:

可以通过用户的旧密码进行鉴权然后授权相关操作。

但是针对密码遗忘的,可以读取AD登记的用户邮箱、手机号,然后发送短信、邮件验证码进行鉴权。

2019-09-30 11:02:37  0 回复

====