LDAP/AD 验证随机错误

LDAP/AD authentication random error

我正在通过 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

(这不是凭据问题 - 正如我所解释的,它是随机发生的,如果用户尝试使用相同的凭据多次登录,它最终会成功)
检查下面 link 中的 LdapLoginModule.java 代码,我试图按照代码中的日志输出了解发生这种情况的确切位置,但我无法准确理解为什么 "authentication failed" 输出是 reached/thrown : LdapLoginModule.java

有人可以帮助我了解可能导致这个随机问题的原因并指出正确的方向吗?可能是 AD 端或 JAAS 配置上的问题?

下面是一些附加信息:

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;
};

任何有关此问题根本原因的想法都将不胜感激。

非常感谢, 乔治

正如您注意到的那样,有一个负载平衡器,您的症状表明您正在对一个不同步的节点进行负载平衡。这不太可能,但更有可能是 AD DC 对您的配置不满意,但其他人对此表示满意。

对于新用户或新更改的用户,复制延迟将是现实生活中此问题的常见示例。

对于现有用户,这似乎不太可能。

它也可能与 memberOf 属性有关,它不是静态属性,而是一个动态查询,当您查询它时会对其进行评估。