我正在使用Spring Security 3.2.5。我为我的身份验证提供程序使用ActiveDirectoryLdapAuthenticationProvider。但是我想在通过Active Directory进行身份验证之前检查我的用户名和密码。 例如,在通过Active Directory启动身份验证过程之前,我想检查用户名和密码是否相同,并且其中没有空间或者其大小不小于特殊大小。在验证过程之前检查用户名和密码的有效性
更新: Spring Security没有允许使用空用户名和/或密码,并提高此异常: 验证请求失败:org.springframework.security.authentication.BadCredentialsException:坏凭据。
我有四处张望在不同的过滤器,我想我应该这样做在UsernamePasswordAuthenticationFilter检查,但我不知道,我不知道该怎么做。我非常感谢你的帮助。
在此先感谢。
最好的问候, /Samaneh
感谢您的回复@MarkVieira。如您所说,Spring Security不允许空的用户名和密码,并且在它调用Active Directory之前,UsernamePasswordAuthenticationFilter引发此异常:
身份验证请求失败:org.springframework.security.authentication.BadCredentialsException:错误凭据。
但我希望Spring Security还检查用户名和密码是否相等,或者是否有空间。我知道我可以用其他方式做到这一点,比如javascript,但我想把所有这些约束放在一个地方,并由Spring Security来处理。 – Samaneh 2014-10-04 05:09:15
正如您提到的@MarkVieira,如果错误消息显示了这些约束的详细信息,则可以将其输入给攻击者。但我想只有一个登录失败的错误消息。 – Samaneh 2014-10-04 05:09:42
这样做的短路逻辑仍然可能以定时攻击的方式暴露漏洞。此外,用户帐户可能未被锁定的问题仍然是一个问题。我很想知道你的用例是什么?为什么不让AD简单地认证他们的凭证?在任何情况下,最好最好的办法可能是扩展'UsernamePasswordAuthenticationFilter',并且可能将你的逻辑放在重写的'setDetails()'方法中,并执行你的检查并抛出BadCredentialsException,否则只需调用超级实现。 – 2014-10-04 05:18:24