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
放在哪里。
我已经解决了问题并用谷歌搜索,但没有任何效果。
我也尝试使用 username
和 DOMAIN\username
以及 username@myserver.com
和 username@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.com
和 dc-2.myserver.com
解析到同一台机器。
您需要为 GitLab 创建一个 AD 用户帐户 ("service account"),其 DN 和密码必须在 GitLab 配置中指定为 bind_dn
和 password
。
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
我在某处安装了 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
放在哪里。
我已经解决了问题并用谷歌搜索,但没有任何效果。
我也尝试使用 username
和 DOMAIN\username
以及 username@myserver.com
和 username@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.com
和 dc-2.myserver.com
解析到同一台机器。
您需要为 GitLab 创建一个 AD 用户帐户 ("service account"),其 DN 和密码必须在 GitLab 配置中指定为 bind_dn
和 password
。
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 usedGit LDAP
instead ofgitldap
and everything is working fine