Система на момент настройки:

  • CentOS 7
  • GitLab 14.7

Создаем клиента в Keycloak

keycloak-gitlab

Тут все просто:

  • Client ID: gitlab;
  • Enabled: On;
  • Client Protocol: openid-connect;
  • Access Type: confidential;
  • Valid Redirect URIs: https://gitlab.0xbbeer.ru/*

Сохраняем созданного клиента и переходим на вкладку Credentials. Копируем значение поля Secret, оно нам пригодится в будущем.

Настраиваем GitLab

Далее открываем файл gitlab.rb (PATH: /etc/gitlab/gitlab.rb ) и добавляем строки:

1gitlab_rails['omniauth_enabled'] = true
2gitlab_rails['omniauth_allow_single_sign_on'] = true
3gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'openid_connect'
4gitlab_rails['omniauth_block_auto_created_users'] = false
5gitlab_rails['omniauth_auto_link_ldap_user'] = false
6gitlab_rails['omniauth_auto_link_ldap_user] = ["openid_connect"]
  • omniauth_enabled - включает Omniauth (по умолчанию включено);

  • omniauth_allow_single_sign_on - разрешает SSO;

  • omniauth_auto_sign_in_with_provider - включает автоматический вход с помощью OpenID (Keycloak). При открытии GitLab, если вы не были авторизованы, будет автоматически перебрасывать на старницу входа Keycloak.

  • omniauth_block_auto_created_users - выключаем блокировку создания пользователей при авторизации;

  • omniauth_auto_link_ldap_user - автоматическая привязка пользователей из AD.

  • omniauth_auto_link_ldap_user - автоматическая привязка пользователей openid_connect (Keycloak) к уже существующим пользователям в GitLab, если их email совпадает.

Далее добавляем провайдера openid_connect:

 1gitlab_rails['omniauth_providers'] = [
 2  {
 3    name: "openid_connect",
 4    label: "Keycloak", # optional label for login button, defaults to "Openid Connect"
 5    args: {
 6      name: "openid_connect",
 7      scope: ["openid", "profile", "email"],
 8      response_type: "code",
 9      issuer:  "https://<YOUR KEYCLOAK URL>/auth/realms/<YOUR REALM>",
10      client_auth_method: "query",
11      discovery: true,
12      uid_field: "preferred_username",
13      client_options: {
14        identifier: "<YOUR APP CLIENT ID>",
15        secret: "<YOUR APP CLIENT SECRET>",
16        redirect_uri: "https://{YOUR GITLAB URL}/users/auth/openid_connect/callback"
17      }
18    }
19  }
20]
  • YOUR KEYCLOAK URL - адрес сервера Keycloak;
  • YOUR REALM - реалм из Keycloak, по умолчанию master
  • YOUR APP CLIENT ID - ClinetID из Keycloak;
  • YOUR APP CLIENT SECRET - Скопированный нами Secret из вкладки Credentials

[OPTIONAL] Настройка переменной окружения SSL_CERT_FILE

Если у Вас локальный CA, после настройки SSO и открытия странички, GitLab может выдать 500 ошибку:

gitlab-500-error

Посмотрим логи GitLab и увидим такую ошибку:

1==> /var/log/gitlab/production.log <==
2
3OpenIDConnect::Discovery::DiscoveryFailed (SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate
4in certificate chain)):

Решение нашлось тут - https://gitlab.com/gitlab-org/charts/gitlab/-/issues/3031.

Добавим переменную окружения SSL_CERT_FILE и укажем путь к нашему файлу с CA-сертификатами:

1gitlab_rails['env'] = {
2        SSL_CERT_FILE: "/etc/pki/tls/cert.pem"
3}

Сохраняем наш конфиг и запускаем переконфигурацию GitLab:

1gitlab-ctl reconfigure

После успешной сборки, перезапускаем сервис и пробуем войти в GitLab.

1systemctl restart gitlab-runsvdir.service 

Полезные ссылки: