У меня есть код, который добавил пользователя на сервер Ladp в PHP
function ldapAddUser ($ ldap_conn, $ ou_dn, $ firstName, $ lastName, $ username, $ pwdtxt, $ email) {
$dn = "CN=$firstName $lastName," . $ou_dn;
$ldaprecord['givenName'] = $firstName;
$ldaprecord['sn'] = $lastName;
$ldaprecord['mail'] = $email;
$ldaprecord['objectclass'] = array("top", "person", "organizationalPerson", "user");
$ldaprecord["sAMAccountName"] = $username;
$ldaprecord["userprincipalname"] = $username . '@test.local';
$ldaprecord["UserAccountControl"] = "544";
$r = ldap_add($ldap_conn, $dn, $ldaprecord);
var_dump($r);
$encodedPass = array('userpassword' => "{SHA}" . base64_encode( sha1( $newPassw, TRUE ) ));
echo "Change password ";
if (ldap_mod_replace($ldap_conn, $dn, $encodedPass)) {
echo "succeded";
} else {
echo "failed";
}
$group_name = "CN=LDAP Testing,OU=Test,DC=test,DC=local";
$group_info['member'] = $dn;// User's DN is added to group's 'member' array
ldap_mod_add($ldap_conn,$group_name,$group_info);
}
** пользователь будет успешно добавлен, но после добавления пользователя, когда я попытался войти в систему с этим пользователем, он не позволил мне войти и выдать ошибку, как **
Blockquote
Ошибка привязки к LDAP: 80090308: LdapErr: DSID-0C0903C5, комментарий: ошибка AcceptSecurityContext, данные 52e, v23f0
для входа
функция входа в систему ($ username, $ password)
{
$ip = "XX.XX.XX.XX"; // WAN IP goes here;
$ldap_url = "ldap://$ip";
$ldaps_url = "ldaps://$ip";
$ldap_domain = 'test.local';
$ldap_dn = "dc=test,dc=local";
define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
// Unsecure - WORKS
$ldap_conn = ldap_connect($ldap_url) or die("Could not connect to LDAP server ($ldap_url)");
ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
echo $password;
$result = ldap_bind($ldap_conn, "$username@$ldap_domain", $password);
if (!$result) {
if (ldap_get_option($ldap_conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error)) {
echo "Error Binding to LDAP: $extended_error";
} else {
echo "Error Binding to LDAP: No additional information is available.";
}
}
}
но это будет работать, если я вручную войду в интерфейс с правами администратора, а затем сброслю пароль для добавленного пользователя, тогда пользователь успешно войдет в систему с помощью моей функции входа.
Пожалуйста, предоставьте предложение, если у кого-то есть идея
Спасибо
Pratik
Попробуйте использовать это для хеширования пароля
function hash_password($password) // SSHA with random 4-character salt
{
$salt = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',4)),0,4);
return '{SSHA}' . base64_encode(mhash(MHASH_SHA1,$password.$salt). $salt);
}
Других решений пока нет …