2013-02-26 88 views
0

我必須讓用戶在Active Directory系統上更改密碼標誌「用戶必須更改密碼」ist set。adLDAP用戶必須更改密碼

只要通過我的AD Adminsitrator授予adLDAP訪問權限即可。

因此,當用戶嘗試登錄時,我檢查屬性「pwdlastset」是否具有指示用戶必須更改其密碼的值。 如果是,我將他重定向到一個更新pw對話框。

這個解決方案的問題是,當用戶輸入無效的初始密碼時,我也會重定向他。 因爲我不能驗證他。當我嘗試綁定用戶時,使用屬性「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分開的屬性會存在我可以請求並檢查它是否相同。但是,當我沒有錯,我認爲這樣的屬性不存在。

回答

3
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嘗試和綁定用戶,改變他們的密碼,以新的東西,如果綁定成功之前(用戶提供不正確的當前密碼),然後調用用戶更改函數並傳遞0,因此它將其設置回原來的狀態,並且用戶可以再次嘗試。當用戶成功綁定並設置新密碼時,可以調用userchange函數並在$ username參數後面傳入-1。

+0

謝謝你,你的解決方案指出我正確的方向。 – ok3n0b1 2013-08-06 07:08:12