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 身份验证返回无效的用户名或密码(缺少 LDAP 窗格)