17

我正在尝试使用 gitlab 配置 LDAP 身份验证。我的配置类似于:

ldap:
    enabled: true
    host: 'ldap.example.com'
    base: 'ou=People,o=example.com'
    port: 636
    uid: 'uid'
    method: 'ssl' # "ssl" or "plain"
    bind_dn: 'cn=gitlab,ou=Apps,o=example.com'
    password: 'password'
    allow_username_or_email_login: true

我用以下方法对其进行了测试:

ldapsearch  -b "ou=People,o=example.com" -s sub -D "cn=gitlab,ou=Apps,o=example.com" -H ldaps://ldap.example.com:636 -w "password" -x "(uid=myname@example.com)"

上面的行有效,但是当我尝试使用 LDAP 登录时,我总是得到“无效的凭据”。

如何解决此问题并缩小此问题的根本原因?

编辑 26/09:

以下是我在 production.log 上发现的一些内容:

Started GET "/users/sign_in" for 127.0.0.1 at 2013-09-23 17:42:58 -0300
Processing by Devise::SessionsController#new as HTML
  Rendered devise/sessions/_new_ldap.html.haml (1.7ms)
  Rendered devise/sessions/_new_base.html.haml (1.8ms)
  Rendered devise/sessions/_oauth_providers.html.haml (0.0ms)
  Rendered devise/sessions/new.html.haml within layouts/devise (4.2ms)
  Rendered layouts/_head.html.haml (1.6ms)
  Rendered layouts/_flash.html.haml (0.1ms)
Completed 200 OK in 9ms (Views: 6.9ms | ActiveRecord: 0.0ms)
Started POST "/users/auth/ldap/callback" for 127.0.0.1 at 2013-09-23 17:43:00 -0300
Processing by OmniauthCallbacksController#failure as HTML
  Parameters: {"utf8"=>"â", "authenticity_token"=>"AwqZsVHRqOeZr+GLWWeGM7MyOAdk7cFl8/rZgbVRU+8=", "username"=>"name@example.com", "password"=>"[FILTERED]"}
Redirected to http://example.com/users/sign_in
Completed 302 Found in 3ms (ActiveRecord: 0.0ms)
Started GET "/users/sign_in" for 127.0.0.1 at 2013-09-23 17:43:00 -0300
Processing by Devise::SessionsController#new as HTML
  Rendered devise/sessions/_new_base.html.haml (2.8ms)
  Rendered devise/sessions/_oauth_providers.html.haml (0.1ms)
  Rendered devise/sessions/new.html.haml within layouts/devise (3.7ms)
  Rendered layouts/_head.html.haml (1.7ms)
  Rendered layouts/_flash.html.haml (0.1ms)
Completed 200 OK in 9ms (Views: 6.6ms | ActiveRecord: 0.0ms)
Started GET "/" for 127.0.0.1 at 2013-09-23 18:50:08 -0300
Processing by DashboardController#show as HTML
Completed 401 Unauthorized in 1ms

编辑:我终于得到了答案:设计中的配置正在剥离“@”之后的所有内容。我不记得确切的名称,但我可以在访问机器后立即发布。我通过将日志添加到 ldap oauth 登录中发现了这一点。

4

3 回答 3

9

OP Kidbomb提到

设计中的配置是在 " "之后剥离所有内容@
我通过将日志添加到 ldap oauth 登录中发现了这一点。


检查 LDAP 服务器是否也可以通过ldap(not ldaps://)访问

ldapsearch  -b "ou=People,o=example.com" -s sub -D "cn=gitlab,ou=Apps,o=example.com" -H ldap://ldap.example.com:389 -w "password" -x "(uid=myname@example.com)"

如果是,请尝试将gitlab.yml设置文件ldap.method从“ssl”修改为“ plain”。

目标是验证用于联系 ldap 服务器的证书是否是这里的问题。

如果您可以通过 ldap:// (无证书)联系服务器,那么至少可以为您提供一种解决方法。

如果不是(必须经过ldaps://),则需要更详细地研究与 LDAP 服务器关联的证书。

openssl s_client -connect ldap.example.com:636  2>/dev/null < /dev/null

(我没有使用-CAFileor-CAPath在这里,假设 CA 是在他们提到的默认位置/etc/ssl/openssl.cnf

如果您在该命令的输出末尾收到消息:

error:num=21:unable to verify the first certificate 

这意味着您需要从颁发者那里获得证书。
请参阅“如何从 Shell 提示符验证 SSL 证书”。

于 2013-12-12T22:17:19.900 回答
2

我们为 gitlabs 配置了 LDAP 凭据,但每当有人登录时,我们都会收到“500 内部服务器错误”消息。但是,当我们正确格式化 /etc/gitlab/gitlab.rb 时,问题似乎消失了。似乎有不同的方法来格式化 ldap 变量,具体取决于您使用的 gitlabs 版本:7.3.2.omnibusmaster

于 2014-10-20T07:58:38.463 回答
2

我看到您找到了适合您的方案的解决方案,但我想我会为遇到 GitLab 和 LDAP 身份验证问题的其他人提供一些额外的故障排除步骤。

  • 运行 GitLab 的 LDAP rake 检查以本地化问题。https://docs.gitlab.com/ce/administration/raketasks/ldap.html#check. 您正在使用的 GitLab 安装文档中还列出了一个更全面的内容。
  • 如果使用 SELinux,请将其设置为许可模式。
  • 如果将 Apache 与 GitLab 一起使用:安装 LDAP - Apache Directory Studio 并尝试建立连接。如果你不能,那么你的 config.yml 文件中可能有问题。我会先看看基地。
  • 运行 tcpdump 并将 .pcap 文件导入 WireShark 进行检查。
  • 查看 LDAP 服务器和 GitLab 服务器上的日志
于 2017-03-31T17:15:18.240 回答