我们有一个使用 ldap 来验证用户身份的应用程序。我们使用https://www.ldaptive.org/作为 ldap 客户端,并通过 jaas 登录配置文件对其进行配置。
这是我们的 jaas 登录配置文件的示例:
ourApplication {
org.ldaptive.jaas.LdapLoginModule required
storePass="true"
ldapUrl="ldap://ldapserver:10389"
baseDn="ou=People,dc=example,dc=com"
useStartTLS="false"
bindDn="uid=admin,ou=People,dc=example,dc=com"
bindCredential="password"
userFilter="(uid={user})";
org.ldaptive.jaas.LdapRoleAuthorizationModule required
useFirstPass="true"
ldapUrl="ldap://ldapserver:10389"
baseDn="ou=Roles,dc=example,dc=com"
roleFilter="(member={dn})"
roleAttribute="cn";
};
这已经足够好了。随着时间的推移,我们开始出现错误,类似于此处描述的内容:
https://confluence.atlassian.com/confkb/ldap-queries-fail-with-address-already-in-use-error-222201829.html
我们遇到类似的通信和绑定错误。
上面的链接建议运行
netstat -na
在我们的应用程序服务器上运行命令来查看是否有大量与 LDAP 服务器的打开连接。当我这样做时,我看到数百行如下所示:
TCP 129.135.249.138:65525 129.135.28.18:10389 ESTABLISHED
其中左侧地址是我们的服务器:端口,右侧是 ldap 服务器:端口。最终,左侧的端口变为 65535,这可能是导致无法进行身份验证的原因:所有端口都被占用,因此无法通信。
上面的 atlassian 链接指向 ldaptive jaas 配置页面,了解如何为 ldaptive 配置连接池的示例:
https://www.ldaptive.org/docs/guide/jaas.html
相关分类