Я пытаюсь настроить аутентификацию LDAP с помощью GitLab (версия 7.12.2, установленная на Ubuntu 14.04 amd64 на виртуальной машине, настроен Omnibus). Я отредактировал свой файл gitlab.rb, чтобы он выглядел следующим образом:
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' # remember to close this block with 'EOS' below
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: '********'
port: 389
uid: 'sAMAccountName'
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: 'CN=********,OU=********,OU=********,DC=********,DC=***'
password: '********'
active_directory: true
allow_username_or_email_login: false
block_auto_created_users: false
base: 'DC=********,DC=***'
user_filter: ''
EOS
Это приводит к ужасному сообщению «Не удалось авторизовать вас из Ldapmain из-за« Недействительные учетные данные »». ошибка. Я пробовал для имени пользователя (в переменной bind_dn): «johnsmith@example.com» (адрес электронной почты на основе имени пользователя), «John Smith» (полное имя) и «johnsmith» (имя пользователя). Результаты всегда одни и те же. В моем пароле есть знак @. Я не уверен, нужно ли мне сбежать от этого и как.
Журналы показывают это:
Started POST "/users/auth/ldapmain/callback" for 127.0.0.1 at 2015-07-22 17:15:01 -0400
Processing by OmniauthCallbacksController#failure as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "username"=>"********", "password"=>"[FILTERED]"}
Redirected to http://192.168.56.102/users/sign_in
Completed 302 Found in 14ms (ActiveRecord: 3.6ms)
Started GET "/users/sign_in" for 127.0.0.1 at 2015-07-22 17:15:01 -0400
Processing by SessionsController#new as HTML
Completed 200 OK in 20ms (Views: 8.3ms | ActiveRecord: 2.9ms)
И gitlab-rake gitlab:ldap:check
показывает это:
Checking LDAP ...
LDAP users with access to your GitLab server (only showing the first 100 results)
Server: ldapmain
Checking LDAP ... Finished
Однако, когда я использую ldapsearch из виртуальной машины Ubuntu (в той же среде), я получаю несколько результатов:
ldapsearch -x -h ******** -D "********@********.***" -W -b "OU=********,OU=********,DC=********,DC=***" -s sub "(cn=*)" cn mail sn dn
Любопытно, что DN в результатах выглядит так:
dn: CN=John Smith,OU=********,OU=********,OU=********,DC=********,DC=***
То есть там есть лишнее OU. Я также вижу, что команда ldapsearch имеет -s sub
, что, как мне кажется, означает поиск подгрупп. Я не очень хорошо разбираюсь в тонкостях LDAP или Active Directory.
Я считаю, что что-то упустил в своей базе, но не знаю, что именно. Также это может быть проблема с пользовательским фильтром. Я выполнил необходимый поиск в Google, который зашел так далеко, но теперь у меня закончились идеи и решения.
Я смог решить эту проблему после многих попыток. Несколько примечаний:
Вот последний YAML:
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'Active Directory'
host: 'ad-server.example.com'
port: 389
uid: 'sAMAccountName'
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: 'user@example.com'
password: 'password'
active_directory: true
allow_username_or_email_login: false
block_auto_created_users: false
base: 'OU=ABC,OU=XYZ,DC=example,DC=com'
user_filter: ''