2015-07-13 2 views
2

Я использую плагин adldap для подключения к Windows Server AD, но, насколько мне известно, проблема связана с php ldap_bind.php ldap-bind Истек срок действия пароля

Когда пользователь вводит неверный пароль, ошибка, возвращаемая с ldap_error (которая используется adldap), это «Недопустимые учетные данные». Все идет нормально.

Проблема возникает при истечении срока действия пароля пользователя или в AD пользователь устанавливает смену пароля при следующем входе в систему (новый пользователь, сброс пароля и т. Д.). В этом случае любой пароль, который пользователь вводит для аутентификации, ldap_error возвращает «Недопустимые учетные данные». Это означает, что я не могу определить, действительно ли пользователь знает пароль с истекшим сроком действия.

У кого-нибудь есть идеи, как я могу обойти эту проблему?

+0

Вы должны быть в состоянии получить «реальную» привязку ошибки с сервера, который будет предоставлять более подробную информацию. Затем вы можете просмотреть https://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors для получения дополнительной информации. – jwilleke

ответ

1

Так как у меня была та же проблема, я искал и found a solution.

define(LDAP_OPT_DIAGNOSTIC_MESSAGE, 0x0032) 

$handle = ldap_connect('ldap://active.directory.server/'); 
$bind = ldap_bind($handle, 'user', 'expiredpass'); 

if ($bind) { 
    if (ldap_get_option($handle, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error)) { 
     echo "Error Binding to LDAP: $extended_error"; 
    } else { 
     echo "Error Binding to LDAP: No additional information is available."; 
    } 
} 

Это возвращает что-то вроде этого:

Ошибка привязки к LDAP: 80090308: LdapErr: DSID-0C0903D0, комментарий: AcceptSecurityContext ошибка, данные 773, v2580

Важная часть - это код после «данных», который представляет LDAP sub codes for error code 49.

Вы можете разобрать код подменю с помощью этой функции:

function parseExentedLdapErrorCode($message) { 
    $code = null; 
    if (preg_match("/(?<=data\s).*?(?=\,)/", $message, $code)) { 
     return $code[0]; 
    } 
    return null; 
} 
Смежные вопросы