GitLab Active Directory身份验证:无结果且无身份验证


8

我正在尝试使用GitLab设置LDAP身份验证(在VM的Ubuntu 14.04 amd64上安装的7.12.2版本,已设置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

但是,当我从Ubuntu VM(同样的环境)中使用ldapsearch时,确实得到了很多结果:

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的来龙去脉并不熟悉。

因此,我相信我的基地中缺少一些东西,但是我不确定是什么。用户过滤器也可能是一个问题。我已经完成了必要的Googling,这使我走到了这一步,但是现在我没有想法和解决方案了。


1
您输入的内容base看起来有点短。当您将ldapsearch结果的完整路径(包括所有OU)放在那里时,会发生什么?
etagenklo

@etagenklo:你是正确的。我进行了一些其他更改,并使它能够正常工作。我将发布后代答案。
siride 2015年

这个答案可能会有所帮助:stackoverflow.com/a/54462889/6290553
Raktim Biswas,

Answers:


11

经过多次尝试,我能够解决此问题。一些注意事项:

  • 确保除第一行外的所有行都有一个缩进空格。第一行是“ main:”,没有缩进。
  • bind_dn不是绑定用户的完整LDAP路径,而只是用户名。就我而言,它是“ xxx@example.com”。
  • 基础必须是Active Directory组或DN或包含所有用户的任何所谓名称。

这是最终的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: ''

1
+1!这是整个stackexchange网络上唯一对我有用的解决方案!
Noir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.