LDAP / AD身份验证随机错误

时间:2016-07-18 10:07:37

标签: java active-directory ldap jaas

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

对此根本原因的任何想法都将非常感激。

非常感谢, 乔治

1 个答案:

答案 0 :(得分:0)

正如您所注意到的那样,有一个负载均衡器,您的症状表明您正在为不同步的节点进行负载平衡。哪种情况不太可能,但更有可能的是AD DC对您的配置不满意,但其他人也不错。

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

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

它也可能与memberOf属性有关,该属性不是静态属性,而是在查询时评估的动态查询。