【问题标题】:Spring ldap authentication failed error codesSpring ldap 身份验证失败错误代码
【发布时间】:2011-05-25 13:50:39
【问题描述】:

我正在使用 Spring LDAP (1.3.1) 与 ADAM 和 Active Directory 通信。

当我尝试使用 ldapTemplate.authenticate() 对某人进行身份验证时,我通过错误回调返回错误,但它给出了一个非常通用的异常 AuthenticationException,我无法提取到底是什么问题:

  • 帐户已停用
  • 密码已过期
  • 下次登录时必须更改密码
  • 帐户已过期

我得到的只是一个 detailMessage,我认为它是 AD 发回的。比如:

org.springframework.ldap.AuthenticationException: [LDAP:错误代码 49 - 8009030C: LdapErr:DSID-0C0903A9,评论: AcceptSecurityContext 错误,数据 773, v1db0

我可以看到数据773,这意味着用户必须在下次登录时更改密码。我不想手动解析这个。有没有我不知道的“适配器”?

有人遇到过这个问题吗?

非常感谢!

【问题讨论】:

    标签: java spring active-directory adam spring-ldap


    【解决方案1】:

    如果您的代码以 PasswordPolicyAwareContextSource.getContext 结尾 或者在类似的 spring 代码中,Spring 不能很好地处理它(bug)。
    当帐户过期时,将引发异常。上面的类捕获了这个异常 然后,这是关键,它调用
    PasswordPolicyResponseControl ctrl = PasswordPolicyControlExtractor.extractControl(ctx);
    Spring 然后调用 ctrl.isLocked() 但无法检查任何其他条件。 你应该重写 Spring 的代码,你可以检查 ctrl.isExpired()、ctrl.isChangeAfterReset() 和一堆其他的信息获取器在那个时候是可用的

    【讨论】:

      【解决方案2】:

      This link 列出了 ldap 错误代码如何映射到 JNDI 异常。查看 spring ldap 代码,似乎 spring 将每个 JNDI 异常映射到其自定义 LDAP 异常 (LdapUtils.convertLdapException())

      现在,773 似乎特定于 Active Directory。因此,如果需要,这需要由用户明确处理。 This link 列出了一堆 Active Directory 错误。 Spring ldap 将在其错误详细信息中提供此文本,让用户根据需要使用它们。

      【讨论】:

        猜你喜欢
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 2020-04-14
        • 2015-04-19
        • 2016-02-05
        相关资源
        最近更新 更多