我正在使用 adldap 插件连接到 Windows Server AD,但据我所知,我的问题是 php ldap_bind 。
当用户输入不正确的密码时,ldap_error(由 adldap 使用)返回的错误是“Invalid Credentials”。到目前为止,一切都很好。
当用户的密码过期或在 AD 中用户设置为在下次登录时更改密码(新用户、密码重置等)时,就会出现问题。在这种情况下,无论用户输入什么密码进行身份验证,ldap_error 都会返回“无效凭据”。这意味着我无法判断用户是否真的知道过期的密码。
有谁知道我如何解决这个问题?
由于我遇到了同样的问题,我进行了搜索并找到了解决方案 http://php.net/manual/en/function.ldap-bind.php.
define(LDAP_OPT_DIAGNOSTIC_MESSAGE, 0x0032)
$handle = ldap_connect('ldap://active.directory.server/');
$bind = ldap_bind($handle, 'user', 'expiredpass');
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
错误,data 773, v2580
重要的部分是“数据”之后的代码,它代表错误代码 49 的 LDAP 子代码 https://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors.
您可以使用此函数解析子代码:
function parseExentedLdapErrorCode($message) {
$code = null;
if (preg_match("/(?<=data\s).*?(?=\,)/", $message, $code)) {
return $code[0];
}
return null;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)