【发布时间】:2016-07-20 01:54:17
【问题描述】:
我正在通过 JAAS 将应用程序与 AD/LDAP 身份验证集成在一起,虽然此界面在 90% 的情况下都可以正常工作,但有时我会在用户尝试登录时遇到技术错误。 日志中的错误如下:
INFO -[LdapLoginModule] user provider: ldaps://<AD server>:636/DC=global,DC=mycompany,DC=com
INFO -[LdapLoginModule] searching for entry belonging to user: <user name>
INFO -[LdapLoginModule] authentication failed
INFO -[LdapLoginModule] aborted authentication
启用其他日志时,我可以看到以下异常:
javax.security.auth.login.FailedLoginException: Cannot find user's LDAP entry
(这不是凭据问题 - 正如我解释的那样,它是随机发生的,如果用户尝试使用相同的凭据再登录几次,它最终会成功)
检查以下链接中的 LdapLoginModule.java 代码,我试图按照代码中的日志输出来了解发生这种情况的确切位置,但我无法准确理解“身份验证失败”输出的确切原因到达/抛出:
LdapLoginModule.java
有人可以帮助我了解可能导致此随机问题的原因并指出正确的方向吗?会不会是 AD 端或 JAAS 配置的问题?
下面是一些附加信息:
- 启用 SSL
- “AD 服务器”不是域控制器,而是负载平衡的 DNS 方法
- 使用匿名绑定(搜索优先)模式
JAAS 配置:
LDAP_AD {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldaps://<AD server>:636/DC=global,DC=mycompany,DC=com"
userFilter="(&(sAMAccountName={USERNAME})(objectcategory=user)(memberof=CN=aGroup,OU=Security Groups,OU=Groups,OU=Geneva,OU=Switzerland,OU=EMEA,DC=global,DC=mycompany,DC=com))"
useSSL=true
debug=true;
};
任何有关此问题根本原因的想法都将不胜感激。
非常感谢, 乔治
【问题讨论】:
标签: java active-directory ldap jaas