OpenID GitLab — подключение с помощью Keycloak

#gitlab #keycloak #openid-connect

#gitlab #keycloak #OpenID-подключение

Вопрос:

Я пытаюсь использовать Keycloak в качестве интерфейса входа для аутентификации в GitLab через OpenID Connect (инструкции GitLab).

Моя конфигурация Omnibus GitLab (работающая через Docker) выглядит следующим образом.

         gitlab_rails['omniauth_providers'] = [
          { 'name' => 'openid_connect',
            'label' => 'Keycloak',
            'args' => {
              'name' => 'openid_connect',
              'scope' => ['openid','profile'],
              'response_type' => 'code',
              'issuer' => '<url>',
              'discovery' => false,
              'client_auth_method' => 'basic',
              'send_scope_to_token_endpoint' => 'false',
              'client_options' => {
                'identifier' => 'gitlab',
                'secret' => '<secret>',
                'redirect_uri' => '<gitlab_url>/users/auth/openid_connect/callback'
              }
            }
          }
        ]
  

Однако при нажатии кнопки входа в систему я получаю не описательное сообщение об ошибке (показано ниже) в журналах ( gitlab/logs/gitlab-rails/production.log ).
Похоже, что процесс завершается в первую очередь (код состояния 200), но впоследствии возникают ошибки.
У кого-нибудь есть идеи, если я что-то неправильно настроил или ошибка, вероятно, на стороне GitLabs?

введите описание изображения здесь

 Started POST "/gitlab/users/auth/openid_connect" for XY at 2020-10-13 14:17:05  0000
Processing by Gitlab::RequestForgeryProtection::Controller#index as HTML
  Parameters: {"authenticity_token"=>"[FILTERED]"}
Completed 200 OK in 2ms (ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocations: 164)

RuntimeError (No Host Info):

lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'
lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'
lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'
lib/gitlab/metrics/transaction.rb:61:in `run'
lib/gitlab/metrics/rack_middleware.rb:16:in `call'
lib/gitlab/request_profiler/middleware.rb:17:in `call'
lib/gitlab/jira/middleware.rb:19:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:13:in `call'
lib/gitlab/middleware/multipart.rb:217:in `call'
lib/gitlab/middleware/read_only/controller.rb:51:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
lib/gitlab/middleware/request_context.rb:23:in `call'
config/initializers/fix_local_cache_middleware.rb:9:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:60:in `call'
lib/gitlab/middleware/release_env.rb:12:in `call'
  

Ответ №1:

Две проблемы вызвали эту проблему:

  1. Я использовал https вместо http для redirect_uri -> http — правильный выбор
  2. Поскольку корень моего экземпляра GitLab находился не в корне домена, а в /gitlab , автоматическое обнаружение не удалось, и мне пришлось установить authorization_endpoint token_endpoint и userinfo_endpoint вручную. Также discovery необходимо отключить.