编辑:这个问题已经得到了很多的意见,我从来没有真正回来,并提供了一个精确的,一步一步的解决scheme。 所以我18个月后回来,做到了。 这个解决scheme适用于简单的绑定,原来的问题是试图获得一个Gitlab Omnibus安装绑定到LDAP服务器,但它应该工作在任何简单的LDAP绑定的情况下。 请参阅我接受的答案,了解我制定解决scheme的确切步骤。 以下是我的Gitlab版本详细信息(对于Gitlab有这个问题的人):
GitLab 7.0.0
GitLab Shell 1.9.6
GitLab API v3
Ruby 2.1.1p76
Rails 4.1.1
原帖:我一直在尝试将近6个小时,让我的Gitlab部署通过Windows Server 2012 Essentials Active Directory LDAP进行身份validation。
我为我的Gitlab服务器运行Ubuntu 14.04。 它已经通过SSSD连接到域控制器。
Gitlab本身使用gitlab.rdconfiguration文件中的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'
我能够查询服务器,但不pipe我select什么设置,我总是得到相同的消息:
"Invalid Credentials"
我试图手动查询DC使用ldapsearch和相同的错误消息:
"ldap_bind: invalid credentials (49)
我已经创build了我用来绑定Windows Server 2012服务器pipe理器中“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的输出。 它可能会揭示一些您的configuration所需的信息。 ldap_uid可能期望formsDOMAIN\UserName或CN=UserCN,DN=Location,DC=Bla (DistinguishedName)。 回发更多的信息,也许我可以帮助!
注意:鳄鱼(<>)大括号将被从值中删除,并且只在那里表示通用值。
在DC上创build用户以用于LDAP绑定。 这是我的上下文的一个例子:
我不认为我真的改变了什么,但是我在帐户选项卡下设置了它,以便用户不能更改密码 ,并且密码永不过期 。 注意我在用户电子邮件中编辑了域名末尾的URL。 对于这些说明的其余部分,我将使用<Domain>.<local> ,但是这个URL可以是与DC的实际FQDN(例如microsoft.com)相对应的任何内容。
在DC本身(最好)或networking连接和授权的机器上,使用提升的权限运行LDP.exe 。 在“ 连接”下,inputDC或本地主机的FQDN(取决于连接的位置),在端口389(或者将其转发到的端口,389是默认的LDAP端口)。 一旦连接,你应该看到很多行,但其中的第一行将是:
configurationNamingContext: CN=Configuration,DC=<Domain>,DC=<local>
记下这些值(DC值对应于您的FQDN,稍后将用于LDAPsearch)。
一旦连接,我们将执行一个简单的绑定与该用户。 单击连接选项卡并select绑定选项。 填写选项(使用您在第一步中创build的用户信息):
如果成功,您应该收到消息Authenticated as: <Domain>\<username>
一旦使用ldp.exe绑定成功到DC,在浏览选项卡下单击search选项:
在“基本DN”字段中,您将复制连接到服务器时记下的确切DC URL值。 所以如果连接显示CN=Configuration,DC=microsoft,DC=com; 那么你会把dc=microsoft,dc=com的基本DN字段。
我使用的filter仅仅是我之前创build的用户名的通配符search。 在属性字段中,我使用了以下值:
objectClass;name;description;canonicalName;lDAPDisplayName
点击运行执行search。 以下输出产生:
这条标记为RED的行是我用来在我的gitlab.rbconfiguration中绑定的值(请注意,此文件已被更改/编辑以反映此处的示例)。 当我login到Gitlab时,这工作完美:
那是我采取的步骤。 我非常确定那些比我更有权力的人可以修改这个方法来找出他们想要的东西。 (特别感谢Nitz指引我朝着正确的方向)。
最后:根据您使用的Windows版本,您的客户端可能会使用SAMAccountName或UserPrincipleName属性,正如Ryan Bolger在Nitz的其他回答的评论中所述。 关于这个属性的更多信息可以在这里find。