我们刚刚开始考虑将一些应用程序的身份验证迁移到 GSuite 的安全 LDAP。我已经阅读了他们的设置说明,并通过 ldapsearch 使其正常工作。但是当我在 apache 配置中设置 ldap 身份验证时,无论如何它都会返回 [未找到用户][没有这样的对象] 错误。
我不擅长 LDAP 配置,所以如果出现明显错误,请见谅。我只是想知道这里是否有人使用 Apache 进行安全 LDAP 身份验证,以及我是否遗漏了一些愚蠢的陷阱。
使用 ldapsearch 一切正常:
~$ ldapsearch -H ldaps://ldap.google.com -b dc=domain,dc=com"(&(objectclass=posixAccount)(uid=test_user))"
SASL/EXTERNAL authentication started
SASL username: st=California,c=US,ou=GSuite,cn=LDAP Client,l=Mountain View,o=Google Inc.
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=com> with scope subtree
# filter: (&(objectclass=*)(uid=test_user))
# requesting: ALL
#
# test_user, Users, domain.com
dn: uid=test_user,ou=Users,dc=domain,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
... etc ...
但是当我尝试使用具有以下配置的 mod_ldap 登录 apache 站点时:
<LocationMatch "/folder/">
AuthType Basic
AuthName "TestSite"
AuthBasicProvider ldap
AuthLDAPUrl "ldaps://ldap.google.com/dc=domain,dc=com?uid"
Require valid-user
# Client auth
LDAPTrustedClientCert KEY_BASE64 ***FILE.key
LDAPTrustedClientCert CERT_BASE64 ***FILE.crt
</LocationMatch>
我最终遇到了缺少对象错误:
[authnz_ldap:debug] mod_authz_core.c(809): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[authnz_ldap:debug] mod_authnz_ldap.c(523): [client ***:38544] AH01691: auth_ldap authenticate:
using URL ldaps://ldap.google.com/dc=domain,dc=com?uid
....
[authnz_ldap:trace1] mod_authnz_ldap.c(544): [client ***:38544] auth_ldap authenticate: final authn filter is (&(objectclass=*)(uid=test_user))
....
[authnz_ldap:info] [client ****:38544] AH01695: auth_ldap authenticate: user test_user authentication failed;
URI /folder/site [User not found][No such object]
[auth_basic:error] [client ***:38544] AH01618: user test_user not found: /folder/site
鉴于 posixUser 确实存在,而且我觉得我已经正确设置了 LDAP 应用程序,我认为错误一定是出在 apache 配置方面。有人对下一步该尝试什么有什么建议吗?
答案1
因此,我可以通过使用 stunnel 和 user/pass auth 来让它工作。
<LocationMatch "/folder/">
AuthType Basic
AuthName "TestSite"
AuthBasicProvider ldap
AuthLDAPUrl "ldaps://localhost:1636/dc=domain,dc=com?uid"
AuthLDAPBindDN <USER>
AuthLDAPBindPassword <PASSWORD>
Require valid-user
</LocationMatch>
以及一个 stunnel 配置
[ldap]
client = yes
accept = 0.0.0.0:16360
connect = ldap.google.com:636
cert = ldap.crt
key = ldap.key
但是,我发现组授权无法正常工作,并且出现了协议错误。为了限制特定组的访问,我正在执行以下操作。
AuthLDAPUrl "ldaps://localhost:1636/dc=domain,dc=com?uid?sub?(memberOf=<GROUP>,ou=Groups,dc=domain,dc=com)"