通过蓝鲸用户中心配置 LDAP 后,存在登录失败以及用户名需要加域(与当前用户的使用习惯不符)等问题。
背景
按照官方文档对接 LDAP 服务后用户正常同步,但是登录时报用户密码错误。
问题分析
后台查看 bk-user-api-web 日志,报错如下:
{ |
报错信息很明显,在 user_info.raw_attributes
里找不到 entryDN
这个 key。即获取用户用于登陆的 login dn 失败,需要修改相关逻辑。
解决方案
修改代码
本地通过 vscode 插件连上 ldap 后,发现用户用于登陆的 login dn 的 key 应该是 dn
,修改用于用户登陆的 login dn 逻辑。详细步骤如下:
通过部署的配置文件
environments/default/version.yaml
找到部署的 bk-user 的版本为:bk-user: "1.4.14-beta.10"
下载该包到本地
helm pull blueking/bk-user --version 1.4.14-beta.10
,解压找到镜像版本:tag: "v2.5.4-beta.10"
找到 bk-user 该 tag 源码地址:https://github.com/TencentBlueKing/bk-user/tree/v2.5.4-beta.10
根据日志找到对应文件
src/api/bkuser_core/categories/plugins/ldap/login.py
修改 fetch_dn 函数的实现,将
entryDN
修改为dn
。
def fetch_dn(user_info: dict) -> str:
return force_str(user_info["raw_attributes"]["dn"][0])
更新服务
制作镜像
我们只需要更新 bk-user-api-web 服务所以只需要制作该服务镜像,执行命令 make build-api
。
变更模版
在 environments/default 目录下新建 bkuser-custom-values.yaml.gotmpl 文件使用新的镜像,若以存在则跳过。
# bk-user-api:v1.0.1 |
更新服务
执行下面的命令进行更新:
helmfile -f base-blueking.yaml.gotmpl -l seq=third sync |
检查以下容器镜像的变更是否符合预期:
- bk-user-api-beat
- bk-user-api-web
- bk-user-api-worker
总结
- 登陆失败的问题可以通过修改源码进行修复。
- 登陆无需加域的临时方案:将用户和组织结构信息同步至默认域,然后查找默认域。需要修改同步逻辑。