我有一个服务帐户,通过它我绑定LDAP连接,我使用JAAS LdapLoginModule
来验证帐户。 LDAP绑定成功后,我需要使用其用户名和密码搜索或验证或搜索其他普通用户。
所以我应该如何处理,因为我没有找到任何带有用户密码的搜索查询,并且这个普通用户不允许LDAP绑定权限。我能够检索其中的所有组和用户,但我找不到密码。
答案 0 :(得分:0)
LDAP目录以“正常”方式使用它作为身份验证提供程序不允许任何用户读取密码属性以避免泄漏。
通常做的是允许任何人仅对此属性进行身份验证,即:任何人都可以使用该属性来尝试绑定操作。
有两种处理你案件的方法:
编辑:回答评论中的问题:
正如我之前所说,为了比较和/或读取(在协议的LDAP操作中)除了主帐户之外的其他用户的密码属性,您必须允许主帐户执行此操作,但不建议这样做
如何允许它,它取决于您使用的LDAP实现(即哪个目录:OpenLDAP,AD,ApacheDS等)
或者你允许每个人绑定目录,这是执行此操作的标准方法:
答案 1 :(得分:0)
你需要:
如果所有这些都成功,则用户属性和密码是正确的。如果不是,不是。
答案 2 :(得分:0)
如果您只想在未经授权的情况下使用JAAS进行身份验证,请不要在安全原则中使用完整的DN,只需传递如下的用户名即可。它将通过身份验证但未获得授权
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.PROVIDER_URL, providerUrl);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "admin");
env.put(Context.SECURITY_CREDENTIALS, "passWord");
如果您想要授权,请使用其他方式