GitLab 接群晖 SSO:改一处 gitlab.rb 四个参数三个开关

痛点场景

代码仓库 GitLab 部在公司内网,研发的账号又是一套独立体系。想把它接进群晖 SSO Server 的单点登录,翻官方知识库会发现:GitLab 和 Jenkins 那种"装插件点页面"的路子不同,它要改配置文件——/etc/gitlab/gitlab.rb 里四个参数、三个开关,然后重载服务。

动手前先核对官方门槛,两条都是硬条件:

  • SSO 服务器:运行 DSM 7.2 或 DSM Enterprise 1.0(PAS)(含更高版本)的群晖存储系统;
  • SSO 客户端GitLab 付费版本——官方明确 Free 方案不支持 SAML SSO。

官方同时注明:部分说明基于 GitLab 提供的内容,实际步骤可能有所不同。

第 1 步:SSO Server 常规设置

在 SSO 服务器上前往 SSO Server > 常规设置

  1. 选择帐户类型:**Domain/LDAP/local(目录和本地用户)**允许本地用户和外部目录用户;**Domain/LDAP(仅目录用户)**只允许外部目录用户。
  2. 单击设置,输入将用作 SSO 登录页面的域名,保存。
  3. 服务器 URL 字段再次输入该域名。

第 2 步:在 SSO Server 建 SAML 应用

前往 SSO Server > 服务,勾选启用 SAML 服务器,复制两项信息:

  • IdP 单点登录 URL
  • SHA-1 指纹

注意这里和 DSM 客户端篇复制的三件套不同——GitLab 对接官方只要求 URL 加 SHA-1 指纹,证书不走文件导入。

然后切换到应用程序页面,选择 SAML,单击下一步,按官方口径填写:

选项 怎么填
应用程序名称 为 GitLab 命名配置文件
重定向 URI GitLab 的 HTTPS 端点:把 /users/auth/saml/callback 附加到 GitLab 服务器的 HTTPS URL 后,官方示例 http://dev-gitlab.syno/users/auth/saml/callback
应用程序 ID 输入 GitLab 服务器的 HTTPS URL
Name ID 格式 Persistent
默认 Name ID 定义识别 GitLab 用户的默认值,官方建议选帐户
属性(可选) 单击添加字段:名称 email,值选"电子邮件"

第 3 步:编辑 gitlab.rb 配置文件

打开终端,编辑 /etc/gitlab/gitlab.rb,把四个参数与官方给出的开关项添加进去:

  • assertion_consumer_service_url:第 2 步配置的重定向 URI;
  • idp_cert_fingerprint:第 2 步复制的 SHA-1 指纹;
  • idp_sso_target_url:第 2 步复制的 IdP 单点登录 URL;
  • issuer:第 2 步配置的应用程序 ID。

官方示例配置如下(示例值替换为自己的实际地址与指纹):

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",
    label: "SSO Login",
    args: {
      assertion_consumer_service_url: "http://dev-gitlab.syno/users/auth/saml/callback",
      idp_cert_fingerprint: "25:9f:c9:3c:a7:21:4c:d2:fc:33:0e:55:f5:30:7a:4b:ce:bf:2f:0b",
      idp_sso_target_url: "https://testsso.synology.tw/webman/sso/SSOOauth.cgi",    issuer: "https://gitlab.synology.tw",
      name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
    }
  }
]

保存文件后重启 GitLab 使配置生效:

sudo gitlab-ctl reconfigure

四个参数的取值都要回溯到第 2 步:assertion_consumer_service_urlissuer 分别对应 SSO Server 应用里的重定向 URI 和应用程序 ID,两边任何一处改了地址,另一侧的配置文件要同步改,否则断言回不到正确的落点。

第 4 步:验证 SAML SSO

打开浏览器隐私窗口,前往 GitLab 登录页面,选择 SSO 作为验证方式,会被重定向到群晖 SSO 页面;输入有权访问 SSO 服务的用户凭据,配置正常即登入 GitLab。

两条官方注意事项,第二条关乎安全

  1. 默认 Name ID 慎用邮箱:为确保信息安全,不建议将电子邮件地址设为默认 Name ID;若仍使用,须确保地址在目录服务中不可修改。
  2. 自动建户开关要看场合:官方明确——若 omniauth_block_auto_created_users 设为 false,通过 SSO 登录的用户将在 GitLab 服务器上自动创建帐户;如果 GitLab 供公众使用,官方建议把此属性设为 true

第 2 条是本篇最值得圈出来的开关:内网私有仓库图省事可以 false,一旦实例面向外部可注册,false 就意味着任何能通过 SSO 认证的人都会自动拿到仓库帐户,必须收紧为 true 并逐个放行。

改配置文件类的对接,考验的是把官方参数表逐项落准的耐心。诚鑫致达科技接手 GitLab 单点登录这类需求时,都会先把 SSO Server 侧的应用参数截图留档,再对照着改 gitlab.rb,一次 reconfigure 通过。