【问题标题】:adLDAP user must change passwordadLDAP 用户必须更改密码
【发布时间】: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 的单独属性,我可以请求它并检查它是否相同。但是当我没有错的时候,我认为这样的属性是不存在的。

【问题讨论】:

    标签: php active-directory


    【解决方案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。

    【讨论】:

    • 谢谢,您的解决方案为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2012-05-18
    • 2018-12-06
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多