gitlabを発見しました。これを、ApacheHTTP_REMOTE_USER環境変数に依存するグローバル認証プロセスに統合したいと思います。
私はそれに関するドキュメントをほとんど見たことがないので、これを行う方法についての助けを必死に探しています。 gitlabアプリケーションからHTTP_REMOTE_USER変数を取得し、それを使用してユーザーを認証したいと思います。
Omniauthとomniauth-ldapを使用しようとしましたが、これはサーバーのエラー500でのみ返され、ApacheHTTP_REMOTE_USER変数のみを取得するには少しやり過ぎのようです。私が探しているのは、そのような機能が単に存在するのか、それとも間違った方向に進んでいるのかということです。誰かがドキュメントへのリンクを持っている場合!
どうもありがとう
あなたの答えに感謝します!私はすでにApache構成ファイルにRequestHeaderを追加していました(私はあなたとしてApacheをnginxではなくUnicornリバースプロキシとして使用しており、ApacheヘッダーでHTTP_REMOTE_USERをUnicornに転送する必要がありました)。次に、利用可能なパッチを適用しました ここ 。
あなたとは異なり、私はldapユーザー名/パスワード認証を使用していませんが、自動起動にldapを使用したKerberos認証を使用しています。 gitlab Webページにアクセスすると、認証が許可されていることをログで確認でき、gitlabはLDAPからユーザー属性(電子メールアドレス)を取得します。アカウントも作成されます(allow_single_sign_on:/home/git/gitlab/config/gitlab.ymlファイルでtrue)。ただし、エラー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を使用して、電子メールアドレスとユーザーアカウント情報を提供し、Apacheを介してKerberosによって入力されるHTTP_REMOTE_USER変数からユーザー名を取得します。
以下は、ApacheをWebサーバーとして実行しているgitlabのクリーンインストールで機能します。 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__
を、LDAP用に作成したgitlabユーザーの資格情報に置き換えます。
次に、bind_as関数がユーザー名を取得できるようにする必要があります。 /home/git/gitlab/vendor/bundle/Ruby/2.0.0/gems/gitlab_omniauth-ldap-1.0.3/lib/omniauth-ldap/adaptor.rb
の86〜86行目を次のように変更しました。
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'
これがお役に立てば幸いです。
警告:メール属性がユーザーのLDAPエントリに設定されていない場合、スクリプトはループします。