Gerrit集成KeyCloak

实践背景:

    为了更好的维护代码仓库,实现公司内部员工和外部员工账号集中管理,搭建Keycloak身份认证平台集成Gerrit代码仓库。

Keycloak是什么?

Keycloak是一个开源的、高度可定制的身份认证和授权管理解决方案,它提供了多种认证方法,包括单点登录、OAuth 2.0 和 OpenID Connect,支持各种标准协议和技术,并与许多常见的标准身份提供商(如Facebook、Google、Github、Gerrit、Jenkins等)集成。Keycloak 可以通过 REST API 进行自定义和扩展,还可以使用插件来实现自定义认证和授权方案。它提供了 Web 界面以及一组 REST API,使得应用程序可以轻松地与系统集成。Keycloak 是一款强大的身份认证和授权平台,具有易于使用、安全可靠、高可扩展性等特点,可广泛用于现代应用程序的身份认证和授权管理方案。

为什么要使Keycloak

根据公司Gerrit服务现有认证是通过http认证,需求账号都是通过手动创建,

这点非常不友好,再加上供应商外包模式,http认证就不能区分内部人员和外部人员,使用Keycloak不仅能关联外界认证服务(LDAP),还能兼容本地用户认证(Gerrit用户=LDAP用户+Keycloak本地用户,LDAP用户为内部用户,Keycloak本地用户为外部用户)。

Keycloak实操

安装部署

采用docker方式部署,下载Keycloak image镜像,使用docker run命令进行启动

docker run -d -p 8011:8080 -v /home/kuser/configuration:/opt/jboss/keycloak/standalone/configuration -v /home/kuser/log:/opt/jboss/keycloak/standalone/log --name keycloak-server  -e KEYCLOAK_USER=username -e KEYCLOAK_PASSWORD=password jboss/keycloak

注意:将配置文件和日志文件挂载出来,便于分析问题

应用环境配置

创建领域

Gerrit集成keycloak认证_gerrit

创建客户端client

Gerrit集成keycloak认证_keycloak_02

Gerrit集成keycloak认证_身份认证_03

创建身份联合

Gerrit集成keycloak认证_keycloak_04

Gerrit集成keycloak认证_gerrit_05

同步ldap到keycloak

修改映射关系

修改Username对应为:sAMAccountName

Gerrit集成keycloak认证_身份认证_06

修改firstName 对应为:givenName


Gerrit实操

用户认证主要是通过Gerrit Oauth插件来实现,用户登入后请求到Keycloak进行用户和密码验证,通过后返回username给到Gerrit。

gerrit安装插件

1)  插件下载链接

https://gerrit-ci.gerritforge.com/

2)插件安装

       将插件拷贝到${gerrit_home}/plugins下面或使用命令方式进行安装:

ssh -p 29418 admin@gerritserver

gerrit插件配置

  ${gerrit_home}/etc/gerrit.config   添加如下配置:

     [auth]
      type = OAUTH
      gitBasicAuthPolicy = http     该配置支持http
      logoutUrl=
http://keycloakserver:port/auth/realms/test/protocol/openid-connect/logout?redirect_uri=http://gerritserver:port/该配置为退出gerrit同时退出keycloak

     [plugin "gerrit-oauth-provider-keycloak-oauth"]
      root-url = http://keycloakserver:port
      realm = test
      client-id = xxx
      client-secret = xxx
      use-preferred-username = true

管理员账号迁移

1)先配置一个admin

2)使用现有模式克隆All-Users仓库,并获取gerrit管理员accoutid,并清空管理员邮箱

3)操作步骤2,完成oauth插件安装,并重启gerrit

4)使用keycloak方式注册gerrit管理员

5)修改配置切换type=development_become_any_account或修改配置切换为原有模式,并重启gerrit

6)更新All-Users,查看使用keycloak注册的gerrit管理员acoutid,命令:grep -r "keycloak"

Gerrit集成keycloak认证_docker_07

7)再次切换为 type = OAUTH认证方式,重启gerrit,使用keycloak提供的管理员账号登入

账号迁移

实现原理:通过keycloak创建gerrit的账号ID替换原有ID,这个动作重复循

环,通过jenkins自建任务实现

Gerrit集成keycloak认证_docker_08

测试结果

登入gerrit,弹出对话框,说明gerrit集成keycloak成功

Gerrit集成keycloak认证_身份认证_09