active directory — Получить количество ошибок AD с LDAP и PHP (функция ldap возвращает неточную ошибку)

Я делаю приложение с использованием PHP для подключения к Active Directory (AD), используя протокол LDAP.

Работает нормально, моя проблема в том, как перехватить конкретные ошибки, если не удается выполнить вход в систему. Сегодня приложение показывает только, сработал ли вход в систему, например: предположим, что срок действия имени пользователя истек в AD, система покажет, что «имя пользователя / пароль недействительны», потому что мы не проверяем конкретные возвраты LDAP.

Хорошо, давайте перейдем к самой проблеме, ниже приведен мой код, который я ожидаю отлавливать конкретные ошибки.

<?php
if (! ($bind = @ldap_bind ( $connect, "DOMAIN\\" . strtoupper ( $this->user), $this->password))) {
error_log ( "Autentication fails LDAP (user: $this->user)" );

return ldap_errno ( $connect );
?>

Эта функция, ldap_errno, возвращает мне номер того, что произошло, основываясь на этой таблице:

(Есть еще, см ссылку ниже)

48 LDAP_INAPPROPRIATE_AUTH
49 LDAP_INVALID_CREDENTIALS
49 / 52e AD_INVALID ПОЛНОМОЧИЯ
49/525 ПОЛЬЗОВАТЕЛЬ НЕ НАЙДЕН
49/530 NOT_PERMITTED_TO_LOGON_AT_THIS_TIME
49/531 RESTRICTED_TO_SPECIFIC_MACHINES
49/532 PASSWORD_EXPIRED
49/533 ACCOUNT_DISABLED
49/568 ERROR_TOO_MANY_CONTEXT_IDS
49/701 ACCOUNT_EXPIRED
49/773 ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН СБРОСИТЬ ПАРОЛЬ
50 LDAP_INSUFFICIENT_ACCESS

http://wiki.servicenow.com/index.php?title=LDAP_Error_Codes

Хорошо, проблема в том, что PHP всегда возвращает мне только 49 (LDAP_INVALID_CREDENTIALS), независимо от ситуации (ситуации, в которой есть связь с логином). Например, если срок действия моей учетной записи истек, PHP возвращает мне 49, я хочу вернуть 49/701, как мне найти 701? Это другая функция?

И как мне показать пользователю, если его пароль ИЛИ его имя пользователя неверно, а не оба? Я знаю, что с точки зрения безопасности показывать, что оба недействительны, но мы решили, что лучше показать, что не так, если имя пользователя или пароль — это можно узнать с помощью LDAP?

Версия PHP 5.4.31

РЕДАКТИРОВАТЬ

Я нашел проблему, которая может быть полезна:

https://bugs.php.net/bug.php?id=47222

Любой знает, как сделать ldap_search таким образом:

ldapsearch -x -H ldap://der-ad-server.de:389 -D accountname@der-ad-server.de -W

Я не знаю, как сделать этот поиск с помощью PHP ldap_search() функция

2

Решение

Потратив много часов на поиски, я нашел решение!

Я основал на этой странице:
http://php.net/manual/en/function.ldap-get-option.php

в основном вы должны определить новую постоянную переменную под названием LDAP_OPT_DIAGNOSTIC_MESSAGE

как это

define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);

а потом

ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);

При этом LDAP выдаст вам расширенную ошибку, и вы сможете узнать, что на самом деле произошло, значение будет помещено в $ extended_error.

10

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector