Система на момент настройки:
- CentOS 7
- GitLab 14.7
Создаем клиента в Keycloak
Тут все просто:
- 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 и увидим такую ошибку:
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
Полезные ссылки:
- GitLab OmniAuth - https://docs.gitlab.com/ee/integration/omniauth.html
- GitLab OIDC - https://docs.gitlab.com/ee/administration/auth/oidc.html
- GitLab setting environment variables - https://docs.gitlab.com/omnibus/settings/environment-variables.html
- [ERROR]OpenIDConnect::Discovery::DiscoveryFailed in Gitlab Version 14.X - https://gitlab.com/gitlab-org/charts/gitlab/-/issues/3031