Gitlab LDAP 身份验证

Gitlab LDAP Authentication

我在某处安装了 Gitlab 服务器,我正在尝试让它为我的 AD 用户工作。我有以下配置:

label: 'LDAP'
host: 'myserver.com'
port: 389
#uid: ''
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: ''
#password: ''
active_directory: true
allow_username_or_email_login: true
block_auto_created_users: false
base: ''
user_filter: ''
## EE only
group_base: ''
admin_group: ''
sync_ssh_keys: false

但是我无法使用提供的设置登录。

我不太熟悉 LDAP 设置,但这是 PHP 中的一段代码,用于登录我们的内部系统,并且运行良好:

$ldap = ldap_connect("ldap://myserver.com/");
if(!ldap_bind($ldap, "DOMAIN\$username", $password))  { 
    echo "Authentication Error";
} else {
        echo "OK";
}

我想我不知道在 Gitlab 配置中把 DOMAIN 放在哪里。

我已经解决了问题并用谷歌搜索,但没有任何效果。

我也尝试使用 usernameDOMAIN\username 以及 username@myserver.comusername@DOMAIN 登录,但是 none 成功了。

通过一些配置(我不记得具体是什么,但如果需要我会找到它),我在日志中得到以下错误:

ArgumentError (uid or filter MUST be provided):

编辑:

这就是我的配置现在的样子,仍然无法正常工作。

label: 'LDAP'
host: 'myserver.com'
port: 389
uid: 'sAMAccountName'
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: 'CN=gitldap,CN=Users,DC=myserver,DC=com'
password: 'thepassword'
active_directory: true
allow_username_or_email_login: true
#block_auto_created_users: false
base: 'ou=MyServer,dc=myserver,dc=com'
#user_filter: ''
### EE only
#group_base: ''
#admin_group: ''
#sync_ssh_keys: false

作为参考,这是 SVN 服务器使用我们的 AD 的方式:

SVNParentPath /var/svn
SSLRequireSSL
AuthType Basic
AuthName "MyServer Source Control System"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPBindDN "CN=svnldap,CN=Users,DC=myserver,DC=com"
AuthLDAPBindPassword 'thepassword'
AuthLDAPURL "ldap://dc-2.myserver.com:389/ou=MyServer,dc=myserver,dc=com?sAMAccountName" NONE
AuthzSVNAccessFile /etc/svn/dav_svn.authz
Require valid-user

而且我不得不提到 myserver.comdc-2.myserver.com 解析到同一台机器。

您需要为 GitLab 创建一个 AD 用户帐户 ("service account"),其 DN 和密码必须在 GitLab 配置中指定为 bind_dnpassword

uid 应设置为 'sAMAccountName'。

这与您在 PHP 中所做的不同。您在那里使用用户的凭据通过 LDAP 访问 AD。 GitLab 将使用它自己的用户帐户,然后查找用户。

第一步是使用 ldapbind (see for instance "Using ldapbind to Authenticate" 检查与 LDAP 的绑定。

如 OP 所述,这允许检测用户 ID 是否正确。

I had to use Common Name, which is First Name + Last Name in bind dn.
I was using username, by mistake.
I used Git LDAP instead of gitldap and everything is working fine