php ldap-bind过期密码

时间:2015-07-13 08:03:19

标签: php active-directory ldap adldap

我正在使用adldap插件连接到Windows Server AD,但我的问题是php ldap_bind,据我所知。

当用户键入错误的密码时,ldap_error(由adldap使用)返回的错误是“凭据无效”。到目前为止一切都很好。

当用户密码过期或AD中用户设置为在下次登录时更改密码(新用户,密码重置等)时出现问题。在这种情况下,无论用户输入什么密码进行身份验证,ldap_error都会返回“Invalid Credentials”。这意味着我无法判断用户是否确实知道过期的密码。

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

由于我遇到了同样的问题,我搜查了found a solution

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   错误,数据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;
}