мы обнаружили gitlab, и я хотел бы интегрировать его в наш глобальный процесс аутентификации, который зависит от переменной среды apache HTTP_REMOTE_USER.
Я видел очень мало документации по нему, поэтому отчаянно ищу любую помощь, как это сделать. Я хотел бы получить из приложения gitlab переменную HTTP_REMOTE_USER и использовать ее для аутентификации моих пользователей.
Я попытался использовать omniauth и omniauth-ldap, но это возвращается только в Ошибках 500 на моем сервере и кажется немного излишним, чтобы получить только переменную Apache HTTP_REMOTE_USER. Я ищу, существует ли такая функция просто или я иду в неправильном направлении; если у кого-то есть ссылки на док!
Большое спасибо
Большое спасибо за ответ! Я уже добавил RequestHeader в файл конфигурации apache (я использую apache как обратный прокси-сервер единорога вместо nginx, и мне нужно перенаправить HTTP_REMOTE_USER единорогу в заголовке apache). Затем я применил доступный патч Вот.
В отличие от вас, я использую не аутентификацию по имени пользователя и паролю ldap, а аутентификацию Kerberos с ldap для авторизации. Когда я перехожу на веб-страницу gitlab, я вижу в журналах, что моя аутентификация предоставлена, и gitlab извлекает из ldap мои атрибуты пользователя (адрес электронной почты). Он даже создает мою учетную запись (согласно allow_single_sign_on: true в файле /home/git/gitlab/config/gitlab.yml). Но затем он отображает ошибку 500 с сообщением журнала «слишком глубокий стек ошибок».
Затем я изменил файл vendor / bundle / ruby / 2.0.0 / activesupport-3.2.13 / lib / active_support / callbacks.rb, чтобы включить фиктивный файл, что происходит: (строка 413)
def __reset_runner(symbol)
f = File::open('/tmp/blah', 'a')
f.write(caller(1,10))
f.close()
Затем я вижу, что он рекурсивно выполняет несколько функций (функции, вызывающие друг друга в бесконечном цикле). (Вот точка в / home / git / gitlab; первая строка повторяется после последней):
vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:436:in `block in __update_callbacks'
vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:433:in `each'
vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:433:in `__update_callbacks'
vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:502:in `set_callback'
vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.13/lib/active_model/callbacks.rb:110:in `before_save'
vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/autosave_association.rb:189:in `add_autosave_association_callbacks'
vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/autosave_association.rb:140:in `build'
vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/builder/has_many.rb:10:in `build'
vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations/builder/collection_association.rb:13:in `build'
vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.13/lib/active_record/associations.rb:1198:in `has_many'
На данном этапе я действительно не знаю, как это исправить; это далеко от моих знаний о RoR (нет) и Ruby (немного). : / Любая помощь будет оценена здесь!
Недавно я столкнулся с той же проблемой, но мне удалось заставить ее работать. Это очень хакерское решение, поэтому вы можете улучшить его самостоятельно. Я использую LDAP для предоставления адреса электронной почты и информации об учетной записи пользователя, получая имя пользователя из переменной HTTP_REMOTE_USER, которая заполняется kerberos через apache.
Следующее работает с чистой установкой gitlab с apache, работающим в качестве веб-сервера. LDAP omniauth должен быть включен и правильно настроен.
Во-первых, мы должны сделать заголовок доступным для ruby, поэтому на виртуальном хосте (httpd.conf) добавьте строку:
RequestHeader set REMOTE-USER %{REMOTE_USER}s
После этого я изменил несколько файлов, чтобы все заработало. /home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/gitlab_omniauth-ldap-1.0.3/lib/omniauth/strategies/ldap.rb
Я изменил строки 43-49, чтобы читать:
# Dont allow blank password for ldap auth
#if request['username'].nil? || request['username'].empty? || request['password'].nil? || request['password'].empty?
# raise MissingCredentialsError.new(env.to_a)#"Missing login credentials")
#end
@ldap_user_info = @adaptor.bind_as(:filter => Net::LDAP::Filter.eq(@adaptor.uid, @options[:name_proc].call(request.env['HTTP_REMOTE_USER'].split('@')[0])),:size => 1, :username => "__ldap-user__", :password => "__User-Password__")
return fail!(:invalid_credentials) if !@ldap_user_info
Замена __ldap-user__
и __user-Password__
с учетными данными пользователя gitlab, который я сделал для ldap.
Затем нам нужно разрешить функции bind_as принимать имя пользователя. Я изменил строки 86-86 из /home/git/gitlab/vendor/bundle/ruby/2.0.0/gems/gitlab_omniauth-ldap-1.0.3/lib/omniauth-ldap/adaptor.rb
читать:
def bind_as(args = {})
result = false
@connection.open do |me|
rs = me.search args
if rs and rs.first and dn = rs.first.dn
password = args[:password]
username = args[:username]
method = args[:method] || @method
password = password.call if password.respond_to?(:call)
if method == 'sasl'
result = rs.first if me.bind(sasl_auths({:username => username, :password => password}).first)
else
result = rs.first if me.bind(:method => :simple, :username => username,
:password => password)
end
end
end
result
end
и, наконец, я изменил диалог входа в систему ldap, чтобы направить страницу прямо к обратному вызову, удалив все в /home/git/gitlab/app/views/devise/sessions/_new_ldap.html.haml
и добавление
%script
window.location.href = '/users/auth/ldap/callback'
Надеюсь, это поможет!
Предупреждение: если атрибут mail не установлен в записи LDAP пользователя, сценарий зациклится.