Gitlab社区版支持多LDAP登录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab社区版支持多LDAP登录相关的知识,希望对你有一定的参考价值。

参考技术A 安装配置Gitlab社区版的时候发现Gitlab支持多LDAP配置,配置完成后发现登录页面还是只有一个登录选项。翻阅官方文档才发现社区版原来不支持多LDAP登录。业务方还是想要多LDAP登录支持,抛来一篇文章:https://segmentfault.com/a/1190000016340093。

看看文章中的修改方案,改动的文件是: /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/gitlab_omniauth-ldap-1.2.1/lib/omniauth/strategies/ldap.rb

这个是LDAP登录页的登录callback,作者在这里通过硬编码方案加上了第二个LDAP登录配置,同时还修改了另外一个地方:

作者方案中第二个LDAP更多的类似一个备用配置,如果两个LDAP用户出现冲突了,第二个LDAP的同名用户就永远登录不了了。

看完这个方案,总觉得有些不太满意,还得找一找优雅的方案。

看代码吧,虽然不会ruby,但老外的代码实现得一般还是很优雅的,读一读改一改还是问题不大的。

很快找到了这个文件:/opt/gitlab/embedded/service/gitlab-rails/app/views/devise/shared/_signin_box.html.haml,是登录框的页面模版:

从页面中可以发现代码中对多LDAP登录没有限制,然后查看一下生成的配置文件,多LDAP也都在配置文件中,都没有问题。

只能继续跟踪一下ldap_servers的相关实现,最后找到两个文件:/opt/gitlab/embedded/service/gitlab-rails/app/controllers/concerns/renders_ldap_servers.rb和/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ldap/config.rb。

我们先看看第一个文件renders_ldap_servers.rb:

代码很简单,如果sign_in_enabled,就返回配置的available_servers。Ldap::Config代码就在第二个文件config.rb中,截取相关代码如下:

在这个代码中我们找到了多LDAP登录限制的“罪魁祸首”——Array.wrap(servers.first)——通过这行代码选取了多个LDAP配置中的第一个,简单的修改此处即可优雅的解锁gitlab社区版的多LDAP支持。

最终解决方案记录如下:

修改/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ldap/config.rb文件:

修改后重启一下gitlab即可。

gitlab集成ldap

出于公司账号太多的缘故,遂萌生了gitlab集成ldap的念头。ldap在此不做描述,推荐用docker镜像安装,简单了事。
gitlab集成ldap比较简单只需修改gitlab配置文件:/etc/gitlab/gitlab.rb

技术图片
。。。。。(中间配置不动,此处省略)
技术图片

注意:uid:由于我的ldap用户全是英文,所以我的值是cn,此处没配置好,登录最易报错。

配置完成后,gitlab-ctl reconfigure 即可。

检查ldap用户: gitlab-rake gitlab:ldap:check, 若能出现用户,证明你配置成功了。

后记:虽然gitlab集成ldap并不难,但是坑还是很多的,网上的文章五花八门,我也是集诸家之长,整理后供大家参考,希望各位兄弟能少踩一点坑。如有技术难题,可加本人qq 1650056712,大家一起探讨。

以上是关于Gitlab社区版支持多LDAP登录的主要内容,如果未能解决你的问题,请参考以下文章

GitLab 社区版 11.0.2用户管理教程

我们可以在 Gitlab 社区版中使用触发器吗

Gitlab 身份验证返回无效的用户名或密码(缺少 LDAP 窗格)

Gitlab 社区版 (Gitlab CE) 都有哪些限制?

Git GitLab服务器社区版安装与使用

安装Gitlab 10.5.2社区版