bk-user icon indicating copy to clipboard operation
bk-user copied to clipboard

[重要] LDAP 同步时,当用户名来源不是 cn 时,会导致部门关系拉取上移一级

Open IMBlues opened this issue 2 years ago • 2 comments

现象

当 LDAP 配置填写,用户名 -> uid (默认为 cn)时

  • 人员拉取正常✅
  • 部门拉取正常✅
  • 人员的部门的关系整体向根路径方向上移一级 ❌

例如,原来 LDAP 中人员关联在 ou=xx,ou=yy,同步后,人员会关联到 ou=yy 中。

原因

我们在代码中默认使用了 cn 作为人员节点标识,用来解析 dn 路径 https://github.com/TencentBlueKing/bk-user/blob/d39373ac4a66741a77271c9e76ae6f00267225fc/src/api/bkuser_core/categories/plugins/ldap/syncer.py#L197

当人员节点非 cn 时,该节点将会被过滤 https://github.com/TencentBlueKing/bk-user/blob/7325642f5d5863574d1111b428d93e6b7f5e5613/src/api/bkuser_core/categories/plugins/ldap/adaptor.py#L175

举例:

cn=xx,ou=xx,ou=yy,dc=qq,dc=ww
uid=xx,ou=xx,ou=yy,o=qq,o=ww

这两种情况,我们会解析成:

cn=xx,ou=xx,ou=yy
ou=xx,ou=yy

前者由于 cn 是属于用户自己,所以我们默认都会去掉第一个元素,得到用户的部门列表:ou=xx,ou=yy 而后者不是 cn,uid=xx 被过滤了,我们还是以为第一个元素是用户自己,得到的部门列表就是 ou=yy

解决方案

去掉固定的 CN_KEY 写法,而是从用户配置中动态获取该节点 key

https://github.com/TencentBlueKing/bk-user/blob/7325642f5d5863574d1111b428d93e6b7f5e5613/src/api/bkuser_core/categories/plugins/ldap/adaptor.py#L30

IMBlues avatar Apr 12 '22 08:04 IMBlues

复现

dc=a,dc=b,dc=local
   |- ou=Group
       |- ou=SubGroup
           |- uid=abcdefg

这种情况下, 配置拉取节点 ou=Gorup,dc=a,dc=b,dc=local

会发现, uid对应的用户, 绑在 Group 下, 而不是SubGroup

对应的代码配置在: https://github.com/wklken/bk-user/blob/0a6aaf5fec00314d614091369ef57ddc9b64e5cd/src/api/bkuser_core/categories/plugins/ldap/syncer.py#L173

wklken avatar Oct 13 '22 09:10 wklken

这个需要尽早解决, 可以在解决department full_name之后处理; 优先级高, 属于ldap top2问题

wklken avatar Nov 14 '22 07:11 wklken