LDAP的理解

        最近因为一个项目研究了几天LDAP这个玩意,看完所有的资源我是这样理解的,应该差不了太多,也欢迎更专业的朋友指正。

        刚开始查的时候很多资料说LDAP是一个数据库,也有说LDAP只是一种通信协议,大家按照这个协议来通信,实现接口通用性。然后很多人也是说LDAP具有高效的查询功能,比较适用于查询频率高,修改频率很低的应用场景,因为他的修改操作效率低,且不支持一些其他数据库的事务性处理功能。

        然后我其实是比较关注的是LDAP的认证功能,最后再查阅了一些资料,豁然开朗,我就把他理解成是一个数据库,然后他有认证的功能。而且这个认证功能是这样的:就是你给他个用户名和密码然后他返回给你一个是否存在或密码是否匹配的认证功能。至于这个账户的鉴权,就是这个账户进来能访问哪些组件不能访问哪些组件,这个LDAP是管不了的,需要配合另外的鉴权模块来进行操作;再者就是使用LDAP做的登录系统,后面使用token来进行认证也是需要和JWT等专门管理token的组件来进行配合处理。简单一句话,LDAP在认证这块就是只做账户密码的正确性校验。我目前是这样理解的,欢迎专业人士指正,十分感谢。

        下面我根据一些资料总结的LDAP认证的流程,他还是和我们传统的方法不一样。先说个大前提,LDAP做认证是需要和树形数据库来完成这个事情的,因为LDAP全称就是Lightweight Directory Access Protocol,轻量目录访问协议,因为是目录协议,所以数据库也是类似目录的数据库库,即是树形数据库。LDAP服务分为服务端和客户端,LDAP的认证过程如下:

        1、首先是类似用户注册的过程,用户名,密码通过接口LDAP协议到LDAP服务器,后面数据库将用户名、密码和其他属性保存到树形数据库,我看LDAP后面的数据一般用的是MDB文件数据库。

        2、然后就是用户使用用户名和密码登录系统。需要注意一下,说是最开始不会用户名和密码。而是客户端先匿名绑定LDAP服务器,如果LDAP服务器没有启用匿名绑定,一般会提供一个默认的账户,用这个默认的账户进行绑定

        3、然后这一步就用到用户名了,而且这一步还暂时不会用到密码。当第2步绑定成功后,需要执行一搜索,而filter需要用户名来构造,类似如下"|(uid=$username)(mai=$username))",这里的username就是登陆名。搜索完毕后需要对结果进行判断,如果只返回一个entry,就说明包含该用户的entry,可以得到entry的dn,下一步会使用。如果返回不止一个或者没有返回,那就说明用户名有误,退出并返回用户名不存在错误信息。

        4、这一步需要使用上一步得到dn,将dn和密码重新绑定LDAP服务器,绑定完成。验证的过程就结束了,如果密码正确,则验证通过,如果密码不正常,则会失败,返回密码错误。

        上面的流程提到了两次绑定,下面更形象的说明这个过程:疑惑就是为什么需要两次绑定,而不是直接拿用户名和密码直接绑定一次,据说是为了不让密码拿出来,防止安全性的问题出现。

        还有一个问题就是,为什么我们需要第一次绑定?为什么不直接使用DN呢,首先就是关于这个DN,对于一般的客户端程序,其并不知道具体的DN是什么。再者让用户输入DN,给用户带来不便的同时,验证也带来问题,因为如果输入的是个目录树而不是所期望的DN,在进行绑定时有可能会让服务器产生不可预料的错,从上面看来,基于LDAP进行身份验证,最好也是最通用的方法就是“两次绑定”。所谓的bind是-一个authentication的过程,不要把它想像成“绑定”,既然是认证,就需要一个用户名和密码,openldap中如果出示的用户名和密码错误,服务器会尝试匿名认证,就和匿名ftp一样。当然,在现实配置中可能需要在认证不获得成功就不能做查询操作,这些是在slapd.conf文件中通过设置ACL实现的。

        认证所用的用户名和密码为目录树中某个节点的两个属性(用户名和密码),一般情况下,程序会默认使用uid和userPassword属性。写程序进行认证的时候只要提供这个节点的两个属性就可以。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值