无法从 Ldapmain 对您进行身份验证,因为 "Invalid credentials for user.name"
Could not authenticate you from Ldapmain because "Invalid credentials for user.name"
我用
- debian 9
- gitlab-ce 11.10.4-ce.0
- 通过 apt 进行综合安装
- openldap 2.4.44
ldap
配置
已配置 /etc/ldap/ldap.conf
:
BASE dc=serverX,dc=lan
URI ldap://serverX.lan
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
已配置 /etc/gitlab/gitlab.rb
:
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-EOS
label: 'Gitlab LDAP'
host: '10.0.0.1'
port: 389
uid: 'sAMAccountName'
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: 'cn=admin,ou=users,dc=serverX,dc=lan'
password: 'xxxx'
encryption: 'plain'
active_directory: false
allow_username_or_email_login: true
block_auto_created_users: false
base: 'ou=users,dc=serverX,dc=lan'
EOS
gitlab-rake gitlab:ldap:check
的输出正常:
# gitlab-rake gitlab:ldap:check
Checking LDAP ...
LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
Checking LDAP ... Finished
从 phpldapadmin 创建的用户:
搜索了大量的网络资源,但我无法找到创建 LDAP 用户或使用现有用户的方法。
我不知道问题是什么以及为什么我得到 Invalid credentials for user.name
:我通过 phpladmin
编辑了 Password
属性 (md5
) 并输入LDAP Gitlab 登录页面中的相同:
Gitlab 日志:
==> /var/log/gitlab/gitlab-rails/production.log <==
Started POST "/users/auth/ldapmain/callback" for 10.0.0.1 at 2019-05-16 07:56:16 +0200
Processing by OmniauthCallbacksController#failure as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "username"=>"user.name", "password"=>"[FILTERED]"}
Redirected to http://domainX.lan/users/sign_in
Completed 302 Found in 411ms (ActiveRecord: 23.1ms)
Started GET "/users/sign_in" for 10.0.0.1 at 2019-05-16 07:56:17 +0200
Processing by SessionsController#new as HTML
Completed 200 OK in 119ms (Views: 104.6ms | ActiveRecord: 7.5ms)
==> /var/log/gitlab/unicorn/unicorn_stdout.log <==
I, [2019-05-16T07:56:16.907169 #3996] INFO -- omniauth: (ldapmain) Callback phase initiated.
E, [2019-05-16T07:56:16.917884 #3996] ERROR -- omniauth: (ldapmain) Authentication failure! invalid_credentials: OmniAuth::Strategies::LDAP::InvalidCredentialsError, Invalid credentials for user.name
目标用户登录的 slapcat
输出:
dn: uuid=gquenot,ou=users,dc=serverX,dc=lan
cn:: abcdef123456789==
sn: Foo Bar
objectClass: inetOrgPerson
objectClass: top
structuralObjectClass: inetOrgPerson
entryUUID: 5133fc-0be-2039-9825-cd7
creatorsName: cn=admin,dc=serverX,dc=lan
createTimestamp: 20190516045340Z
userPassword:: xxxxxxxx
mail: me@example.com
entryCSN: 20190516101837.136599Z#000000#000#000000
modifiersName: cn=admin,dc=serverX,dc=lan
modifyTimestamp: 20190516101837Z
有人知道怎么回事吗?
也许有人可以给我一个示例 ldiff
和一个工作配置?
编辑:
slapadd
通过 slapadd -f file.ldiff
尝试使用此 ldiff
:
dn: cn=admin,dc=serverX,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Firstname Lastname
givenName: Gilles
sn: Quenot
uid: gquenot
mail: me@example.com
userPassword: {MD5}xxxxxxxxxxxxxx
错误:
5cdd8fe4 slapcat_so.txt: line 1: unknown directive <dn:> outside backend info and database definitions.
slapadd: bad configuration file!
编辑2
已修复:
ldapadd -x -H ldap://serverX:389 -D 'cn=admin,dc=serverX,dc=lan' -W -f stuff.ldiff
并在 phpldapadmin
中更新了密码
当您使用 OpenLDAP 对用户进行身份验证时,您的 Gitlab 配置以 Active Directory 为目标,因此首先要做的是修复 /etc/gitlab/gitlab.rb
中的以下参数:
uid: 'uid'
active_directory: false
我不知道 attributes
在身份验证上下文中的目的是什么(编辑:attributes
用于将用户数据从 ldap 同步到其 Gitlab 帐户,它应该'身份验证本身无关紧要)。
可能还有其他问题,例如用户的 uid 不是 'user.name',或者基数太窄,例如(user.name 条目可能不在 ou=people
),如果您不知道使用基本 dn 作为基本搜索,或者通过 运行ning 搜索 with/without 'ou' 部分进行检查:
ldapsearch -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -b ou=people,dc=serverX,dc=lan uid=user.name \*
我还会直接根据 ldap 检查凭据本身,即。不是通过Gitlab,通过执行大致相同的查询但是使用user.name绑定,这里我们实际上测试他可以绑定并读取自己的条目:
ldapsearch -H ldap://10.0.0.1:389 -D <user.name dn> -W -b <user.name dn> -s base \*
此外,GitLab 文档坚持认为 LDAP 用户必须设置电子邮件地址,无论是否用于登录。
包含 user.name 条目的典型 ldif 文件将使用 ldapadd -f
创建(前提是在其 distinguished 名称中提到的 ou 和 dc 存在)将如下所示:
# user.name entry
dn: uid=user.name,ou=users,dc=serverX,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Firstname Lastname
givenName: Firstname
sn: Lastname
uid: user.name
mail: user.name@domain.com
userPassword: {MD5}<base64EncodedHash>
我不知道 if/how GitLab 知道密码加密方案(似乎没有为此配置,或者我错过了)。
您可以创建一个测试用例条目:
- 将
<base64EncodedHash>
替换为{MD5}CY9rzUYh03PK3k6DJie09g==
(它代表密码test
,如果你需要我有一个脚本来生成它们)。
- 别忘了将 dn 中的 dc 替换为真实的
- 注意 ldif 文件中的空行和 \t,因为它会破坏您的 ldap add/modify 操作。
- 运行
ldapadd -x -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -f ldifFilename
创建用户条目。
- 运行在上面的第一个 ldapsearch 命令中,您应该会看到该新条目的结果。
- 运行第二个,与用户凭据绑定'test'并搜索自己的条目(因此 -b 基本参数指向他自己以避免搜索期间的权限问题),你应该再次看到相同的结果。
在gitlab.rb中:
gitlab_rails['ldap_servers'] = YAML.load <<-EOS
label: 'Gitlab LDAP'
host: '10.0.0.1'
port: 389
uid: 'uid'
bind_dn: 'cn=admin,ou=users,dc=serverX,dc=lan'
password: 'xxxx'
encryption: 'plain'
active_directory: false
allow_username_or_email_login: false
block_auto_created_users: false
base: 'ou=users,dc=serverX,dc=lan'
如果您可以与该用户绑定但不能通过 gitlab ui,则可能意味着它不处理 {MD5} 身份验证方案。
我遇到了同样的问题 - 尽管我输入了正确的凭据,但凭据无效。
这个解决方案对我有用 -
我的 gitlab.rb 必须按照下面的这种方式进行更改。之前我没有更改 'uid' 的值,它被设置为 'sAMAccountName',如你所见,我评论了它
并将值更改为 'uid' 本身。所以 'uid' => 'uid' 是设置。在执行此设置之前,即使我是 运行 命令 -
gitlab-rake gitlab:ldap:check ,用于显示的输出 - LDAP 身份验证...成功
但没有显示 ldap 用户列表。
一旦我像上面那样更改了 uid 值,rake 命令就可以顺利运行并向我显示 dc 中所有 ldap 用户的列表。 Post 我还可以通过 UI
登录到应用程序
注意 - 用您自己的值替换所有 XXX。
gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'LDAP',
'host' => '10.XXX.XX.XX',
'port' => 389,
# 'uid' => 'sAMAccountName',
'uid' => 'uid',#mandatory need to keep the value as 'uid' only
'encryption' => 'plain',
'verify_certificates' => false,
'bind_dn' => 'cn=XXX,dc=XXXX,dc=XXX',
'password' => 'XXX',
'verify_certificates' => false,
# 'tls_options' => {
# 'ca_file' => '',
# 'ssl_version' => '',
# 'ciphers' => '',
# 'cert' => '',
# 'key' => ''
# },
'timeout' => 10,
'active_directory' => false,
'allow_username_or_email_login' => false,
'block_auto_created_users' => false,
'base' => 'dc=XXX,dc=XX',
# 'user_filter' => '',
# 'attributes' => {
# 'username' => ['uid', 'userid', 'sAMAccountName'],
# 'email' => ['mail', 'email', 'userPrincipalName'],
# 'name' => 'cn',
# 'first_name' => 'givenName',
# 'last_name' => 'sn'
# },
'lowercase_usernames' => true,
# EE Only
# 'group_base' => '',
# 'admin_group' => '',
# 'external_groups' => [],
# 'sync_ssh_keys' => false
}
}
我用
- debian 9
- gitlab-ce 11.10.4-ce.0
- 通过 apt 进行综合安装
- openldap 2.4.44
ldap
配置
已配置 /etc/ldap/ldap.conf
:
BASE dc=serverX,dc=lan
URI ldap://serverX.lan
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
已配置 /etc/gitlab/gitlab.rb
:
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-EOS
label: 'Gitlab LDAP'
host: '10.0.0.1'
port: 389
uid: 'sAMAccountName'
method: 'plain' # "tls" or "ssl" or "plain"
bind_dn: 'cn=admin,ou=users,dc=serverX,dc=lan'
password: 'xxxx'
encryption: 'plain'
active_directory: false
allow_username_or_email_login: true
block_auto_created_users: false
base: 'ou=users,dc=serverX,dc=lan'
EOS
gitlab-rake gitlab:ldap:check
的输出正常:
# gitlab-rake gitlab:ldap:check
Checking LDAP ...
LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
Checking LDAP ... Finished
从 phpldapadmin 创建的用户:
搜索了大量的网络资源,但我无法找到创建 LDAP 用户或使用现有用户的方法。
我不知道问题是什么以及为什么我得到 Invalid credentials for user.name
:我通过 phpladmin
编辑了 Password
属性 (md5
) 并输入LDAP Gitlab 登录页面中的相同:
Gitlab 日志:
==> /var/log/gitlab/gitlab-rails/production.log <==
Started POST "/users/auth/ldapmain/callback" for 10.0.0.1 at 2019-05-16 07:56:16 +0200
Processing by OmniauthCallbacksController#failure as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "username"=>"user.name", "password"=>"[FILTERED]"}
Redirected to http://domainX.lan/users/sign_in
Completed 302 Found in 411ms (ActiveRecord: 23.1ms)
Started GET "/users/sign_in" for 10.0.0.1 at 2019-05-16 07:56:17 +0200
Processing by SessionsController#new as HTML
Completed 200 OK in 119ms (Views: 104.6ms | ActiveRecord: 7.5ms)
==> /var/log/gitlab/unicorn/unicorn_stdout.log <==
I, [2019-05-16T07:56:16.907169 #3996] INFO -- omniauth: (ldapmain) Callback phase initiated.
E, [2019-05-16T07:56:16.917884 #3996] ERROR -- omniauth: (ldapmain) Authentication failure! invalid_credentials: OmniAuth::Strategies::LDAP::InvalidCredentialsError, Invalid credentials for user.name
目标用户登录的 slapcat
输出:
dn: uuid=gquenot,ou=users,dc=serverX,dc=lan
cn:: abcdef123456789==
sn: Foo Bar
objectClass: inetOrgPerson
objectClass: top
structuralObjectClass: inetOrgPerson
entryUUID: 5133fc-0be-2039-9825-cd7
creatorsName: cn=admin,dc=serverX,dc=lan
createTimestamp: 20190516045340Z
userPassword:: xxxxxxxx
mail: me@example.com
entryCSN: 20190516101837.136599Z#000000#000#000000
modifiersName: cn=admin,dc=serverX,dc=lan
modifyTimestamp: 20190516101837Z
有人知道怎么回事吗?
也许有人可以给我一个示例 ldiff
和一个工作配置?
编辑:
slapadd
通过 slapadd -f file.ldiff
尝试使用此 ldiff
:
dn: cn=admin,dc=serverX,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Firstname Lastname
givenName: Gilles
sn: Quenot
uid: gquenot
mail: me@example.com
userPassword: {MD5}xxxxxxxxxxxxxx
错误:
5cdd8fe4 slapcat_so.txt: line 1: unknown directive <dn:> outside backend info and database definitions.
slapadd: bad configuration file!
编辑2
已修复:
ldapadd -x -H ldap://serverX:389 -D 'cn=admin,dc=serverX,dc=lan' -W -f stuff.ldiff
并在 phpldapadmin
当您使用 OpenLDAP 对用户进行身份验证时,您的 Gitlab 配置以 Active Directory 为目标,因此首先要做的是修复 /etc/gitlab/gitlab.rb
中的以下参数:
uid: 'uid'
active_directory: false
我不知道 attributes
在身份验证上下文中的目的是什么(编辑:attributes
用于将用户数据从 ldap 同步到其 Gitlab 帐户,它应该'身份验证本身无关紧要)。
可能还有其他问题,例如用户的 uid 不是 'user.name',或者基数太窄,例如(user.name 条目可能不在 ou=people
),如果您不知道使用基本 dn 作为基本搜索,或者通过 运行ning 搜索 with/without 'ou' 部分进行检查:
ldapsearch -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -b ou=people,dc=serverX,dc=lan uid=user.name \*
我还会直接根据 ldap 检查凭据本身,即。不是通过Gitlab,通过执行大致相同的查询但是使用user.name绑定,这里我们实际上测试他可以绑定并读取自己的条目:
ldapsearch -H ldap://10.0.0.1:389 -D <user.name dn> -W -b <user.name dn> -s base \*
此外,GitLab 文档坚持认为 LDAP 用户必须设置电子邮件地址,无论是否用于登录。
包含 user.name 条目的典型 ldif 文件将使用 ldapadd -f
创建(前提是在其 distinguished 名称中提到的 ou 和 dc 存在)将如下所示:
# user.name entry
dn: uid=user.name,ou=users,dc=serverX,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Firstname Lastname
givenName: Firstname
sn: Lastname
uid: user.name
mail: user.name@domain.com
userPassword: {MD5}<base64EncodedHash>
我不知道 if/how GitLab 知道密码加密方案(似乎没有为此配置,或者我错过了)。
您可以创建一个测试用例条目:
- 将
<base64EncodedHash>
替换为{MD5}CY9rzUYh03PK3k6DJie09g==
(它代表密码test
,如果你需要我有一个脚本来生成它们)。 - 别忘了将 dn 中的 dc 替换为真实的
- 注意 ldif 文件中的空行和 \t,因为它会破坏您的 ldap add/modify 操作。
- 运行
ldapadd -x -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -f ldifFilename
创建用户条目。 - 运行在上面的第一个 ldapsearch 命令中,您应该会看到该新条目的结果。
- 运行第二个,与用户凭据绑定'test'并搜索自己的条目(因此 -b 基本参数指向他自己以避免搜索期间的权限问题),你应该再次看到相同的结果。
在gitlab.rb中:
gitlab_rails['ldap_servers'] = YAML.load <<-EOS
label: 'Gitlab LDAP'
host: '10.0.0.1'
port: 389
uid: 'uid'
bind_dn: 'cn=admin,ou=users,dc=serverX,dc=lan'
password: 'xxxx'
encryption: 'plain'
active_directory: false
allow_username_or_email_login: false
block_auto_created_users: false
base: 'ou=users,dc=serverX,dc=lan'
如果您可以与该用户绑定但不能通过 gitlab ui,则可能意味着它不处理 {MD5} 身份验证方案。
我遇到了同样的问题 - 尽管我输入了正确的凭据,但凭据无效。 这个解决方案对我有用 - 我的 gitlab.rb 必须按照下面的这种方式进行更改。之前我没有更改 'uid' 的值,它被设置为 'sAMAccountName',如你所见,我评论了它 并将值更改为 'uid' 本身。所以 'uid' => 'uid' 是设置。在执行此设置之前,即使我是 运行 命令 - gitlab-rake gitlab:ldap:check ,用于显示的输出 - LDAP 身份验证...成功 但没有显示 ldap 用户列表。 一旦我像上面那样更改了 uid 值,rake 命令就可以顺利运行并向我显示 dc 中所有 ldap 用户的列表。 Post 我还可以通过 UI
登录到应用程序注意 - 用您自己的值替换所有 XXX。
gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'LDAP',
'host' => '10.XXX.XX.XX',
'port' => 389,
# 'uid' => 'sAMAccountName',
'uid' => 'uid',#mandatory need to keep the value as 'uid' only
'encryption' => 'plain',
'verify_certificates' => false,
'bind_dn' => 'cn=XXX,dc=XXXX,dc=XXX',
'password' => 'XXX',
'verify_certificates' => false,
# 'tls_options' => {
# 'ca_file' => '',
# 'ssl_version' => '',
# 'ciphers' => '',
# 'cert' => '',
# 'key' => ''
# },
'timeout' => 10,
'active_directory' => false,
'allow_username_or_email_login' => false,
'block_auto_created_users' => false,
'base' => 'dc=XXX,dc=XX',
# 'user_filter' => '',
# 'attributes' => {
# 'username' => ['uid', 'userid', 'sAMAccountName'],
# 'email' => ['mail', 'email', 'userPrincipalName'],
# 'name' => 'cn',
# 'first_name' => 'givenName',
# 'last_name' => 'sn'
# },
'lowercase_usernames' => true,
# EE Only
# 'group_base' => '',
# 'admin_group' => '',
# 'external_groups' => [],
# 'sync_ssh_keys' => false
}
}