编辑:这个问题得到了很多意见,我从来没有真正回来并提供了一个精确的、逐步的解决方案。所以我在 18 个月后回来并做到了。此解决方案适用于简单绑定,最初的问题是在尝试让 Gitlab Omnibus 安装绑定到 LDAP 服务器的上下文中提出的,但它应该适用于任何简单的 LDAP 绑定。有关我为生成解决方案所做的确切步骤,请参阅我接受的答案。以下是我的 Gitlab 版本详细信息(适用于对 Gitlab 有此问题的人):
亚搏体育app 7.0.0
亚搏体育app外壳1.9.6
GitLab API v3
红宝石 2.1.1p76
导轨 4.1.1
原始帖子: 我已经尝试了将近 6 个小时来让我的 Gitlab 部署通过 Windows Server 2012 Essentials Active Directory LDAP 进行身份验证。
我正在为我的 Gitlab 服务器运行 Ubuntu 14.04。它已经通过 SSSD 连接到域控制器。
Gitlab 本身使用 gitlab.rd 配置文件中的 LDAP 设置,如下所示:
# These settings are documented in more detail at
# https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/gitlab.yml.example#L118
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_host'] = 'hostname of LDAP server'
gitlab_rails['ldap_port'] = 389
gitlab_rails['ldap_uid'] = 'sAMAccountName'
gitlab_rails['ldap_method'] = 'plain' # 'ssl' or 'plain'
gitlab_rails['ldap_bind_dn'] = 'CN=query user,CN=Users,DC=mycorp,DC=com'
gitlab_rails['ldap_password'] = 'query user password'
gitlab_rails['ldap_allow_username_or_email_login'] = true
gitlab_rails['ldap_base'] = 'DC=mycorp,DC=com'
我可以查询服务器,但无论我选择什么设置,我总是会收到相同的消息:
"Invalid Credentials"
我尝试使用 ldapsearch 和相同的错误消息手动查询 DC:
"ldap_bind: invalid credentials (49)
我已经在 Windows Server 2012 服务器管理器的 Active Directory 用户部分创建了我用来绑定的用户。
我已经尝试了 OU=Users 和 CN=Users 和其他用户的每一个组合,确保 AD 中所有用户的所有电子邮件地址字段都已填充,但我无法得到一个正确的响应。
是否有一种简单的方法可以返回 Active Directory 对象的所有 Bind_dn 和 Base 信息?这变得非常令人沮丧。
无论我在互联网上的哪个位置查看,所有信息都与旧版本的 Windows(ldapsearch 等)有关。我对系统方面的东西很陌生(这是我的第一份暑期实习工作)。
这是我正在使用的当前设置的示例:
gitlab_rails['ldap_bind_dn'] = 'CN=Gitlab LDAP,OU=Users,DC=servername,DC=local'
gitlab_rails['ldap_base'] = 'OU=Users,DC=servername,DC=local'
以及我一直在尝试使用 ldapsearch 为我的 Windows AD DS 找到正确绑定设置的相应示例:
ldapsearch -b "ou=Users,dc=servername,dc=local" -h 192.168.0.3 -p 389 -D "uid=Gitlab LDAP,ou=Users,dc=servername,dc=local" -w "<password>"
无济于事。我已经尝试了几十种组合。用户“gitlab”在 Windows Server 中的显示名称为“Gitlab LDAP”,带有电子邮件,全部小写。底线:是否有一些简单的方法可以单击 Windows DC 中的对象并检索正确的 LDAP 设置以使用该用户对象进行 ldap 绑定?!如果我容易情绪爆发,这就是我会做的地方。
总是相同的错误消息:“无效的凭据”
感谢您的时间和考虑,任何和所有的帮助将不胜感激。
我知道这不是一个完整的答案,但由于声誉,我无法发表评论。
需要考虑的几点:
ldp.exe
. 它是一个实际的 LDAP 客户端,因此如果您设法将其配置为正常工作,那么相同的参数很可能适用于 Gitlab。请参阅此以获得基本
ldp
指导,并确保您阅读了 LDP 的输出。它可能会显示您的配置所需的更多信息。ldap_uid
可能期望表单DOMAIN\UserName
或CN=UserCN,DN=Location,DC=Bla
(DistinguishedName)。发回更多信息,也许我可以提供帮助!
注意:鳄鱼 (<>) 大括号将从值中删除,并且仅用于指示通用值。
在 DC 上创建一个用户以用于 LDAP 绑定。这是我的上下文的示例:
我认为我并没有真正改变任何东西,但我确实在Account选项卡下进行了设置,以便User cannot change password并且Password never expires。注意我从用户电子邮件的域末尾编辑了 URL。对于这些说明的其余部分,我将使用
<Domain>.<local>
,但此 URL 可以是与您的 DC 的实际 FQDN 相对应的任何内容(例如 microsoft.com)。在 DC 本身(最好)或网络连接和授权的机器上,以提升的权限运行LDP.exe 。在Connection下,在端口 389(或将其转发到的任何端口,389 是默认 LDAP 端口)输入 DC 或 localhost(取决于您从哪里连接)的 FQDN。连接后,您应该会看到许多行,但第一行将是:
configurationNamingContext: CN=Configuration,DC=<Domain>,DC=<local>
记下这些值(DC 值对应于您的 FQDN,稍后将在 LDAP 搜索中使用)。
连接后,我们将与该用户执行简单绑定。单击连接选项卡并选择绑定选项。像这样填写选项(使用您在第一步中创建的用户信息):
如果成功,您应该会收到一条消息
Authenticated as: <Domain>\<username>
使用 ldp.exe 成功绑定到 DC 后,在“浏览”选项卡下单击“搜索”选项:
在 Base DN 字段中,您将复制连接到服务器时记录的确切 DC URL 值。因此,如果显示连接,
CN=Configuration,DC=microsoft,DC=com;
那么您将dc=microsoft,dc=com
输入 Base DN 字段。我使用的过滤器只是对我之前创建的用户名的通配符搜索。在属性字段中,我使用了以下值:
objectClass;name;description;canonicalName;lDAPDisplayName
单击运行以执行搜索。产生以下输出:
标记为 RED 的这一行是我用来在我的 gitlab.rb 配置中绑定的值(请注意,此文件已更改/编辑以反映此处的示例)。当我登录 Gitlab 时,这非常有效:
这些是我采取的步骤。我很确定那些拥有更多管理能力的人可能会修改这种方法以找出他们想要的任何东西。(特别感谢Nitz为我指明了正确的方向)。
最后:根据您使用的 Windows 版本,您的客户端可能会使用 SAMAccountName 或 UserPrincipleName 属性,正如Ryan Bolger在 Nitz 的另一个答案的评论中提到的那样。可以在此处找到有关此属性的更多信息。