php ldap-bind 密码过期

标签 php active-directory ldap adldap

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

当用户键入不正确的密码时,从 ldap_error(由 adldap 使用)返回的错误是“无效凭据”。到目前为止一切顺利。

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

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

最佳答案

因为我遇到了同样的问题,所以我搜索了 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.";
}

这会返回如下内容:

Error Binding to LDAP: 80090308: LdapErr: DSID-0C0903D0, comment: AcceptSecurityContext error, data 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;
}

关于php ldap-bind 密码过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31378207/

相关文章:

php - 创建用户,但使用 PHP 检查 Active Directory 中是否存在

sql-server - SQL ADSI Active Directory 创建新帐户

c# - 使用事件目录对用户进行身份验证并获取要在其他地方使用的 token

active-directory - 使用 kerberos 将 Linux 绑定(bind)到 Active Directory

c# - [C#、.NET] : Validating users via LDAP through IdentityServer3

php - 是否有模仿 User-Agent 字符串的 iPhone 模拟器,以便我可以使用 php-mobile-detect?

php - 使用隐藏的 &lt;input&gt; 并将其值设置为 php 中的某个内容然后传递给 jquery 不好吗?

php mysql 查询 - 添加更多字段时文档为空

php - Codeigniter URL 重写以删除index.php

amazon-ec2 - 如何在 Amazon Linux 上安装 SSSD