我们有一个包含多个域的 Google G 套件,并且用户的电子邮件地址并不总是具有主域扩展名。
当 ldap 在安全 LDAP 环境中搜索具有非主域的用户时,我们会返回错误的用户 DN。
例子:
LDAPTLS_CERT=ldap-client.crt LDAPTLS_KEY=ldap-client.key ldapsearch -H ldaps://ldap.google.com -b dc=example,dc=com '(mail=user@company.nl)'
返回dn: uid=user,ou=Users,dc=example,dc=com
它应该返回的地方dn: uid=user,dc=company,dc=nl
但是有了这个错误的 DN,我的半径身份验证的下一步(因为这是我们使用它的地方)失败:
LDAPTLS_CERT=ldap-client.crt LDAPTLS_KEY=ldap-client.key ldapsearch -W -D uid=user,ou=Users,dc=example,dc=com -H ldaps://ldap.google.com -b dc=example,dc=com '(mail=user@company.nl)'
使用
ldap_bind: Invalid credentials (49)
additional info: Incorrect password
这是有道理的,因为 LDAP 找不到用户。
而与正确的 DN 绑定成功:
LDAPTLS_CERT=ldap-client.crt LDAPTLS_KEY=ldap-client.key ldapsearch -W -D uid=user,ou=Users,dc=company,dc=nl -H ldaps://ldap.google.com -b dc=example,dc=com '(mail=user@company.nl)'
如果我从用户的电子邮件地址查询具有相应 base_dn 的用户,则返回的 DN 是可以的,但我认为,我无法根据用户的电子邮件地址动态调整 based_dn,在 freeradius
我不确定这是 google LDAP 服务器的问题还是 LDAP 协议的问题或 I/radius 查询 LDAP 的方式的问题。
我正在考虑在授权部分实现脚本身份验证并实现我自己的 ldapsearch + bind ,但我希望有更好的解决方案。
谢谢。韦塞尔