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 > 常规设置:
- 选择帐户类型:**Domain/LDAP/local(目录和本地用户)**允许本地用户和外部目录用户;**Domain/LDAP(仅目录用户)**只允许外部目录用户。
- 单击设置,输入将用作 SSO 登录页面的域名,保存。
- 在服务器 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_url 与 issuer 分别对应 SSO Server 应用里的重定向 URI 和应用程序 ID,两边任何一处改了地址,另一侧的配置文件要同步改,否则断言回不到正确的落点。
第 4 步:验证 SAML SSO
打开浏览器隐私窗口,前往 GitLab 登录页面,选择 SSO 作为验证方式,会被重定向到群晖 SSO 页面;输入有权访问 SSO 服务的用户凭据,配置正常即登入 GitLab。
两条官方注意事项,第二条关乎安全
- 默认 Name ID 慎用邮箱:为确保信息安全,不建议将电子邮件地址设为默认 Name ID;若仍使用,须确保地址在目录服务中不可修改。
- 自动建户开关要看场合:官方明确——若
omniauth_block_auto_created_users设为false,通过 SSO 登录的用户将在 GitLab 服务器上自动创建帐户;如果 GitLab 供公众使用,官方建议把此属性设为true。
第 2 条是本篇最值得圈出来的开关:内网私有仓库图省事可以 false,一旦实例面向外部可注册,false 就意味着任何能通过 SSO 认证的人都会自动拿到仓库帐户,必须收紧为 true 并逐个放行。
改配置文件类的对接,考验的是把官方参数表逐项落准的耐心。诚鑫致达科技接手 GitLab 单点登录这类需求时,都会先把 SSO Server 侧的应用参数截图留档,再对照着改 gitlab.rb,一次 reconfigure 通过。