ldap_bind()函数,php如何验证ldap成员的用户名密码?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
费劲力气在openldap
里面添加了新的用户成员,其主要目的就是:使用代码编程到ldap
里面验证用户名密码。因为ldap
被大家主要用做“统一登陆验证”嘛。所以,用户名密码的验证必然是重头戏。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:win10
,nginx@1.15.11
,php@8.2.9nts
,php_ldap.so
,openldap@2.4.32
。
写在前面
首先,php
里面必须开启ldap
的扩展。这个是重要前提!参考下图:
代码框架
使用php
代码链接ldap
的前置代码框架,非常简单。
$con = @ldap_connect('ldap://127.0.0.1', 389);
ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($con, LDAP_OPT_REFERRALS, 0);
if ($con) {
// ldap_bind()
}
接下来的代码,无论是处理什么样的登陆请求,都是对ldap_bind()这个函数的调用。
匿名登陆
主打就是一个危险操作,匿名登陆。虽然phpldapadmin
的config/config.php
里面,可以配置修改禁止匿名登陆。但是这个主打的也是个“治标不治本”,ldap
服务端允许匿名访问的话,谁也没有办法。(这个待后续讨论)
$ldapbind = ldap_bind($con);
if ($ldapbind) {
echo "匿名登陆成功";
} else {
echo "匿名登陆失败";
}
根用户及预设用户登陆
在前几篇的文章里面,大家已经知道:默认情况下,openldap
有两个用户,还可以通过命令行或者用户工具添加新的用户。
- 根用户
cn=Manager,dc=my-domain,dc=com
,密码:sercret
。 - 预设用户
uid=hacker,ou=People,dc=my-domain,dc=com
,密码:OneTwo2012
。 - 自定义用户
cn=s n,ou=People,dc=my-domain,dc=com
,密码:11111
。
$ok = ldap_bind($con, 'cn=Manager,dc=my-domain,dc=com', 'secret');
$ok = ldap_bind($con, 'uid=hacker,ou=People,dc=my-domain,dc=com', 'OneTwo2012');
$ok = ldap_bind($con, 'cn=s n,ou=People,dc=my-domain,dc=com', '11111');
简单模糊用户名dn登陆
ldap
里面的dn
就是大家所熟识的username
。然而真实的dn
变量里面各种“定语”太长了,导致dn
和大家常见的用户名相关较大。所以,大家可以设置basedn
来省略掉基础的dn
部分数据,然后再利用ldap_bind()
进行验证逻辑了。比如:
$username = "s n";
$password = "11111";
$ok = ldap_bind($con, 'cn='.$username.',ou=People,dc=my-domain,dc=com', $password);
不过这种方案里面,对于dn
的格式要求比较高。如果说,对于dn
的格式并不是特别严格的话,比如预设用户hacker
,它的dn
就是使用uid
进行定义的,而不是这里的cn
。这种情况下,就需要使用ldap_search
来进行高级的模糊逻辑处理了。这个待后续文章讨论。
完整代码
$con = @ldap_connect('ldap://127.0.0.1', 389);
ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($con, LDAP_OPT_REFERRALS, 0);
if ($con) {
$bd = ldap_bind($con);
var_dump($bd);
$bd = @ldap_bind($con, 'cn=Manager,dc=my-domain,dc=com', 'secret');
var_dump($bd);
$bd = @ldap_bind($con, 'uid=hacker,ou=People,dc=my-domain,dc=com', 'OneTwo2012');
var_dump($bd);
$bd = @ldap_bind($con, 'cn=s n,ou=People,dc=my-domain,dc=com', '11111');
var_dump($bd);
$username = "s n";
$bd = @ldap_bind($con, 'cn='.$username.',ou=People,dc=my-domain,dc=com', "11111");
var_dump($bd);
}
相关文章
- https://newsn.net/say/openldap.html
- https://newsn.net/say/phpldapadmin.html
- https://newsn.net/say/openldap-init.html
- https://newsn.net/say/openldap-user.html
总结
更多ldap
相关文章,请点击苏南大叔的经验文章。链接请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。