当前位置: 首页 > 知识库问答 >
问题:

Spring Security LDAP身份验证错误-身份验证异常而不是密码锁定

刁璞
2023-03-14

身份验证工作正常,但是,每次我使用错误的密码登录时,我会得到以下异常,而不是密码锁定异常。我认为Spring LDAP在对用户进行身份验证时并没有检查PwdPolicy(计算密码尝试)。

ne=(javax.naming.authenticationexception)javax.naming.authenticationexception:[LDAP:错误代码49-invalid_credentials:绑定失败:err229无法对用户进行身份验证CN=admin,OU=users,O=organization]

我的LDIF文件是

dn:cn=default,ou=pwdPolicy,o=organization objectclass:device
objectclass:pwdPolicy objectclass:top cn:default
pwdattribute:userPassword pwdexpirewarning:3600 pwdgraceexpire:1 pwdlockout:TRUE pwdlockoutduration:120 pwdmaxage:2592000
pwdmaxfailure:2

spring配置文件如下所示

<authentication-manager alias="authenticationManager" xmlns="http://www.springframework.org/schema/security">
  <authentication-provider ref="jdbcProviderManager" />
  <authentication-provider ref="ldapProviderManager" />      
</authentication-manager>

<bean id="jdbcProviderManager" class="au.com.spring.handler.DBLoginAuthentication">
  <property name="userDetailsService" ref="daoAuthenticationProvider" />
</bean>

<bean id="ldapProviderManager" class="au.com.spring.handler.LDAPLoginAuthentication">
  <property name="userDetailsService" ref="ldapAuthenticationProvider" />
</html" target="_blank">bean>

<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
  <property name="userDetailsService" ref="JdbcUserDetailsManager" />
  <property name="passwordEncoder" ref="encoder" />
</bean>

<bean id="ldapAuthenticationProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
  <constructor-arg>
    <bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
      <constructor-arg ref="contextSource" />
      <property name="userSearch" ref="ldapUserSearch" />
    </bean>
  </constructor-arg>
  <constructor-arg>
    <bean class="au.com.spring.handler.CustomLDAPAuthoritiesPopulator">
      <constructor-arg ref="contextSource" />
      <constructor-arg value="${group.search}" />
      <property name="groupSearchFilter" value="${group.search.filter}" />
      <property name="groupRoleAttribute" value="${group.role.att}" />
      <property name="rolePrefix" value="ROLE_" />
      <property name="searchSubtree" value="true" />
      <property name="convertToUpperCase" value="true" />
    </bean>
  </constructor-arg>
  <property name="hideUserNotFoundExceptions" value="false" />
  <property name="useAuthenticationRequestCredentials" value="true" />
  <property name="userDetailsContextMapper" ref="inetOrgPersonContextMapper" />
</bean>

<bean id="inetOrgPersonContextMapper" class="org.springframework.security.ldap.userdetails.InetOrgPersonContextMapper" />

<bean id="defaultLdapUsernameToDnMapper" class="org.springframework.security.ldap.DefaultLdapUsernameToDnMapper">
  <constructor-arg value="${users.search}" />
  <constructor-arg value="${uid.att}" />
</bean>
<!--<bean id="authenticationSuccessListener" class="prpa.athos.security.listener.AuthenticationSuccessListener" />-->

<!--<bean id="contextSource" class="org.springframework.security.ldap.ppolicy.PasswordPolicyAwareContextSource">-->
<bean id="contextSource" class="org.springframework.security.ldap.ppolicy.PasswordPolicyAwareContextSource">
  <constructor-arg value="ldap://localhost:10389/o=organization" />
  <!--<property name=""/>-->
</bean>

共有1个答案

茹正祥
2023-03-14

我得到的是以下异常而不是密码锁异常。

LDAP密码策略草案10:

8.1.1.如果帐户被锁定,则失败

 类似资料:
  • 在用户使用JNDIRealm身份验证登录Tomcat期间,我在Catalina日志中收到以下错误: 2018年6月26日12:08:29.547严重[http-nio-8080-exec-7]组织。阿帕奇。卡特琳娜。领域JNDIRealm。执行身份验证javax时发生身份验证异常。命名。AuthenticationException:[LDAP:错误代码49-80090308:LDAPPER:DS

  • 我使用以下代码发送XML请求: 但有时我会犯这个错误: 当我得到错误401时,我如何捕捉和处理异常?如果可能的话,我希望处理行之后的异常。

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我的网站安全配置如下; 当我给出错误的用户名时,身份验证会按预期失败。但是,如果我一次验证成功,之后所有密码错误但用户名正确的请求都会成功验证。。。。 它被缓存在什么地方了吗? 我可以禁用此功能吗? 难道它不应该给出错误密码的身份验证失败吗? 注意:我正在学习Spring安全。我没有任何HTML页面在这个应用程序和测试从邮递员。

  • 电子邮件验证+电子邮件/密码验证的使用不适用于在用户开始使用服务之前绝对需要电子邮件验证的服务。 让我用Google sign in First的一个例子来解释。 首先,用户登录他们的Google帐户(比如电子邮件是),并授权您的应用程序。然后使用通过它接收到的令牌创建一个凭据,并与Firebase交换这些令牌以将用户登录到Firebase。用户需要存在于Firebase中,您才能使用Fireba

  • cluster=hfactory.getOrCreateCluster(“test cluster”,“localhost:9160”,凭据); 但不幸的是,它给了我一个错误: HFactory类型中的方法getOrCreateCluster(String,CassandraHostConfigurator,Map)不适用于参数(String,String,Map)