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