adLDAP 用户必须更改密码

Posted

技术标签:

【中文标题】adLDAP 用户必须更改密码【英文标题】:adLDAP user must change password 【发布时间】:2013-02-26 08:29:42 【问题描述】:

当在 Active Directory 系统上设置了“用户必须更改密码”标志时,我必须让用户更改他的密码。

当我通过我的 AD 管理员授予 adLDAP 访问权限时,这才有效。

因此,当用户尝试登录时,我会检查属性“pwdlastset”是否具有指示用户必须更改密码的值。 如果是,我将他重定向到更新密码对话框。

这个解决方案的问题是,当用户输入无效的初始密码时,我也会重定向他。 因为我无法验证他。当我尝试绑定用户时,设置了“pwdlastet”属性,它总是返回一个错误“无法绑定”。

$adldap = new \adLDAP(array("base_dn" => $basedn, "account_suffix" => $accsuffix,"domain_controllers" => $dc,"admin_username" => $adminuser, "admin_password" => $adminpw));        

//Get Requesting Users "pwdLastSet" Field over the Admin Account
$userToAuthInfo =  $adldap->user()->info($name,"pwdlastset");
if($userToAuthInfo[0]["pwdlastset"][0] == 0)

//redirect user to pwd renew

else

//bind user and redirect to home

有人知道我该如何解决这个问题吗? 我想如果存在带有 pw 的单独属性,我可以请求它并检查它是否相同。但是当我没有错的时候,我认为这样的属性是不存在的。

【问题讨论】:

【参考方案1】:
function userchange($username,$pwdLastSetVal,$domadlogin,$domadpw,$domctrl)

    $ldapServer = $domctrl;
    $ldapBase = 'OU= ,DC= ,DC= '; //be sure to set this according to your ldap settings
    $ds = ldap_connect($ldapServer);

    if (!$ds)
       die('Cannot Connect to LDAP server');

    $ldapBind = ldap_bind($ds,$domadlogin,$domadpw);
    if (!$ldapBind)
       die('Cannot Bind to LDAP server');

    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die("Error setting LDAP version");

    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0) or die("Error setting referrals option");

    $attrs = array("samaccountname", "pwdlastset");
    $filter = "(samaccountname=".$username.")";
    $sr = ldap_search($ds, $ldapBase, $filter, $attrs);
    $ent= ldap_get_entries($ds,$sr);
    $dn=$ent[0]["dn"];
    $userdata=array();

    $userdata["pwdlastset"][0]=$pwdLastSetVal;

    ldap_modify($ds, $dn, $userdata); //change state

    ldap_close($ds);


// -1 or 0 after the username parameter
userchange($username, -1, $domadlogin, $domadpw, $domctrl);

我会在你尝试绑定用户并将他们的密码更改为新密码之前调用此函数并传递-1,如果绑定成功(用户提供了不正确的当前密码),然后再次调用 userchange 函数并传递 0,因此它将其设置回之前的状态,用户可以重试。当用户成功绑定并设置新密码后,可以调用userchange函数,在$username参数后传入-1。

【讨论】:

谢谢,您的解决方案为我指明了正确的方向。

以上是关于adLDAP 用户必须更改密码的主要内容,如果未能解决你的问题,请参考以下文章

允许用户更改密码的模式。用户是不是必须重复新密码以及输入旧密码?

linux如何设置一般用户密码必须达到一定强度?还有3月强制更改一次密码?

如何在用户密码过期或“用户下次登录时必须更改密码”时检查 AD 用户凭据

linux如何设置一般用户密码必须达到一定强度?还有3月强制更改一次密码?

2008AD域用户密码更改

win10启动,显示“你的密码已过期,必须更改”,导致无法登陆,求解。