首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >adLDAP用户必须更改密码

adLDAP用户必须更改密码
EN

Stack Overflow用户
提问于 2013-02-26 16:29:43
回答 1查看 3.1K关注 0票数 0

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

当我通过我的AD Adminsitrator授予adLDAP访问权限时,它才起作用。

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

这个解决方案的问题是,当用户输入无效的初始密码时,我也会重定向他。因为我不能证明他的有效性。当我试图绑定设置了属性"pwdlastet“的用户时,总是返回一个错误"Unable to bind”。

代码语言:javascript
复制
$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存在一个单独的属性,我可以请求它,并检查它是否相同。但是当我没有错的时候,我认为这样的属性并不存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-20 00:46:17

代码语言:javascript
复制
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。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15084506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档