共计 1149 个字符,预计需要花费 3 分钟才能阅读完成。
工作中,ldap 服务器的对接,能够能会波及到同步组织构造,认证,认证后处理等等,最近认证还不是我想写的刚需,持续来看看对于组织构造的想法
例如同步 AD 域的组织构造,或者是 ldap 协定的其余产品对应的企业组织构造,如下我简略的创立的一些 ou 和 cn
查看以后 ldap 组织构造
咱们通过命令查看 ldap 服务器上的组织构造数据,咱们只查看 DN 即可,不须要其余的属性
# ldapsearch -x -LLL -b dc=xiaomotong,dc=com objectClass=* d:
咱们能够看到,ldap 服务器给咱们返回的数据中,是 1 个 list,这个 list 外面每 1 个元素是 1 个 entry,是 1 条记录,也是 1 个惟一的标识
那么问题就很明确了,如何将上述的 dn list,转成 1 棵树呢?
咱们能够根据上述打印后果画图,进行剖析一下
先画一棵树
依据下面的打印后果,在和理论 ldap admin 可视化工具 中能够看出,根理论是在最初 dc=xiaomotong,dc=com
,而后从右往左 别离是 ou,cn
前 5 条数据对应画进去的图是这样的:
看上去有戏,持续往下画看看成果:
- 红色框为 ou
- 绿色框为 dc
- 蓝色框为 cn
对就是这样的一棵树,画进去了,可是咱们如何用代码实现一下呢?
编码实现
编码实现将 ldif 格局的数据转成树,并用 json 的形式输入,查看成果
实现形式
1、遍历每一条 entry
2、解决每一条 entry 的时候,从右到左获取相应的 rdn(对应的键和值),并给每一个 rdn 创立一个 多叉树的 节点
3、basedn 对应的节点 和 每一个 ou 对应的节点地址,寄存到一个 map(key 是 string,value 是节点的地址) 中便于后续遍历解决其余 entry 的时候,间接通过 ou 名字获取对应节点地址即可
4、对于一个节点上面的用户,间接挂到这个节点上即可
画个图来论述一下 map 的作用:
例如咱们须要画一个组织构造,先画根节点
当初咱们要遍历对应的 entry,例如:
- cn=B,dc=A
- ou=C,dc=A
- ou=D,dc=A
须要画上 B,C,D,咱们别离创立好对应的节点,然而如何挂到 A 下面去的呢?这个时候,是不是就须要 A 的地址了,正好这个 entry 又能获取到 A 的名字,也就是 map 的 key,这样子,咱们就能够获取到 A 的地址了
持续解析 entry
- ou=E,ou=C,dc=A
- cn=F,ou=E,ou=C,dc=A
原理同上
通过下面的简图,算是能够将 ldap 的 ldif 格局的数据,转换成咱们想要的树了,思路是有了,编码的话就很快了 具体编码能够看下一篇
学习所得,如有偏差,还请不吝赐教
欢送点赞,关注,珍藏
敌人们,你的反对和激励,是我保持分享,提高质量的能源
好了,本次就到这里
技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。
我是 阿兵云原生,欢送点赞关注珍藏,下次见~