java 使用Jetty进行LDAP绑定身份验证

lx0bsm1f  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(208)

我正在尝试使用jetty LdapLoginModule来保护Confluent Control Center 7.2.2。我的以下jaas配置正在工作。

c3 {
  org.eclipse.jetty.jaas.spi.LdapLoginModule required
  useLdaps="true"
  contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
  hostname="ldaps.xxxx.xxxxx"
  port="xxx"
  bindDn=<user principal name>
  bindPassword=<user password>
  authenticationMethod="simple"
  forceBindingLogin="true"
  userBaseDn="DC=xxxx,DC=xxxx,DC=xxx,DC=xx"
  userRdnAttribute="userPrincipalName"
  userIdAttribute="userPrincipalName"
  userObjectClass="user"
  roleBaseDn="OU=xxxxxx,OU=xxx,OU=xxxxx,DC=xxxx,DC=xxxx,DC=xxx,DC=xx"
  roleNameAttribute="cn"
  roleMemberAttribute="member"
  roleObjectClass="group";
};

我希望避免传递bindDn和bindPassword,而是使用验证用户凭据进行绑定,我的理解是将forceBindingLogin设置为true应该可以实现这一点。

    • forceBindingLogin**指示是否绑定为正在进行身份验证的用户(true),否则绑定为管理员并执行搜索以验证用户密码(false)。

虽然当我从我的配置中删除bindDn和bindPassword时,我得到了以下错误:
DAP:错误代码1 - 000004DC:Ldap错误:DSID-0C090A71,备注:要执行此操作,必须在连接上成功完成绑定。,data 0,v3839
当forceBindingLogin设置为true时,似乎仍在使用bindDn。
我注意到在Confluence文档中,bindDn配置在6.1.9和6.2.0之间从可选变为必需。Jetty升级到9.4.39,但没有提到为什么现在需要bindDn。

tsm1rwdh

tsm1rwdh1#

我没有使用Confluent Control Center的经验,但多年来一直在处理大量使用LDAP身份验证的Java应用程序和OAuth。作为一名DevOps,我还必须自己管理一些LDAP示例,因此我将以这种背景进行介绍。
OpenLDAP的身份验证过程要求满足以下条件之一:
1.允许匿名(连接)绑定此配置允许您以匿名用户身份连接到LDAP服务器,并在树中查找任何对象,从而找到任何组、用户等。
1.管理器/用户DN(连接)绑定此配置要求您以预配置用户的身份连接到LDAP服务器,该用户有权在树中查找对象并查找请求的组、用户等。您可以配置多个管理器DN以访问LDAP树的不同部分。
注意,我提到了CONNECTION绑定--可以把它想象成连接到Postgres或MySQL的方式,你需要有一些凭据来查找表,或者如果启用了匿名,你可以做几乎任何事情。
同样的事情也适用于LDAP服务器--anonymous binding将允许您建立连接并查找任何内容,而manager / user dn要求在建立连接之前进行身份验证。
人们并不总是深入了解LDAP的体系结构,文档在这方面也没有真正的帮助。因此,术语会让你得出你所得出的合理结论:
@alex:我希望避免传递bindDn和bindPassword,而是使用身份验证用户凭据进行绑定
只有当LDAP服务器配置为允许匿名连接时,此操作才有效。如果配置为要求Manager/User DN连接:
1.当您将bind作为user时,身份验证可能会通过(除非LDAP配置为根本不允许)。
1.一旦成功,您将尝试查找authorization对象(角色/组/等)。此时,由于无法执行所需的查找,它将失败,最终结果将是登录失败。
要验证是否是这种情况,您应该:
1.使用一些工具连接到LDAP服务器(可以尝试Apache Directory Studio
1.将绑定设置为指定用户的连接(即my-username;不是manager dn,也不是read-only dn
1.连接后,尝试查找userBaseDnroleBaseDn DN--您很可能看不到任何角色。
如果上述情况属实,那么您想要的是不可能与当前的LDAP服务器设置。
如果没有--那么LDAP服务器确实允许您绑定为user并查找目录树。在这种情况下,您应该打开Confluent的bug报告。

相关问题