bk-user
bk-user copied to clipboard
[重要] LDAP 同步时,当用户名来源不是 cn 时,会导致部门关系拉取上移一级
现象
当 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
复现
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
这个需要尽早解决, 可以在解决department full_name之后处理; 优先级高, 属于ldap top2问题