GitLab SSO By SAML

本文为您介绍如何在IDaaS中通过SAML协议,配置Gitlab单点登录。

应用简介

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。

说明

GitLab支持多种SSO协议,本文档介绍如何通过SAML协议对接GitLab。 GitLab SAML官网文档:GitLaB官网文档

操作步骤

一、配置IDaaS应用

请管理员前往应用 > 应用市场,搜索到GitLab SAML应用。确认应用名后,即可完成添加流程。

image.png

创建应用成功后,会自动来到SSO单点登录配置页。

配置SSO

image

您只需要将GitLab的服务地址填写进来,注意服务地址不要以/结尾

其他选项保持默认,点击保存即可完成全部SSO配置。

说明

应用账户:默认使用IDaaS账户名作为应用登录标识。GitLab支持自动创建账户,单点登录时,若GitLab中不存在指定账户,则会直接创建出来。若希望灵活配置,请参考单点配置通用说明-应用账户进行配置。授权范围:默认全员可用。若希望指定可访问应用的IDaaS账户,请参考单点配置通用说明-应用账户进行配置。

配置页面下方,包含了一系列GitLab完成配置所需要的参数。image.png

二、配置Gitlab

根据GitLab官网文档,您需要在部署环境中编辑Gitlab配置文件。

# 若您使用 Omnibus 安装 Gitlab,请使用命令:
sudo editor /etc/gitlab/gitlab.rb

#若您使用独立安装 Gitlab,请参考命令:
cd /home/git/gitlab
sudo -u git -H editor config/gitlab.yml

将如下信息补充进配置文件(参数按照onmibus安装方式提供。独立安装的参数与其一致,但格式不同,详情参考GitLab官网文档):

gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers']=[
  {
    name: 'saml', 
    args: {
      name: 'saml', 
      assertion_consumer_service_url:'http://gitlab.example.com/users/auth/saml/callback',
      issuer:'http://gitlab.example.com/users/auth/saml',
      idp_cert_fingerprint:'23:f8:77:03:fc:69:4c:da:ac:7e:4a:42:5a:87:5a:b3:ad:a8:d9:df',
      idp_sso_target_url:'https://example.aliyunidaas.com/login/app/app_mivpoqqmz7zrslxcmlyxa25me4/saml2/sso',
      name_identifier_format:'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
      attribute_statements: { 
        nickname: ['username'],
      },
    },
    label:'EIAM2.0'
  }
]

如上参数中大部分无需调整,仅有几项配置需要修改:

参数名

说明

示例

args.assertion_consumer_service_url

填写GitLab的断言消费地址,一般是GitLab服务地址后加 /users/auth/saml/callback

http://gitlab.example.com/users/auth/saml/c****ack

args.issuer

填写GitLab的身份标识,一般是 GitLab服务地址后加 /users/auth/saml

http://gitlab.****ple.com/users/auth/saml

args.idp_sso_target_url

IdP SSO地址,从IDaaS获得

https://example.aliyunidaas.com/login/app/app_mi****qmz7zrslxcmlyxa25me4/saml2/sso

args.idp_cert_fingerprint

Idp公钥证书指纹。请您下载证书后,通过检查证书属性,获取证书SHA1指纹。可能获取到的指纹信息并未按照冒号 : 区隔,您可能需要手动处理。

23:f8:77:03:fc:69:4c:da:ac:7e:4a:42:5a:87:5a:b3:ad:a8:d****

配置完成后,使用命令重启Gitlab。

# 若您使用 Omnibus 安装 Gitlab,请使用命令重新加载配置文件并重启服务:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

# 若您使用独立安装 Gitlab,请参考命令:
# 运行 systemd 的系统
sudo systemctl restart gitlab.target

# 允许 SysV init 的系统
sudo service gitlab restart

重启后,在Gitlab登录页下方,应出现使用阿里云IDaaS账户登录。​

配置完成。

三、尝试SSO

您已经可以尝试GitLab SSO。​

本文中GitLab采用SAML协议,既支持IdP发起(即从阿里云IDaaS发起)SSO,也支持SP发起(即从GitLab发起)SSO流程。

IdP发起

请用已授权使用GitLabIDaaS账户,登录到IDaaS门户页,单击页面上GitLab图标,发起SSO。

image.png

SP发起

请在匿名浏览器中,打开Gitlab登录页,单击阿里云 IDaaS,则会跳转到IDaaS进行登录。如果用户尚未登录IDaaS ,则IDaaS会引导用户进行登录 。

image.png

IDaaS验证用户身份通过后,将直接登录到GitLab中。