2014-10-03 92 views
0

我正在使用Spring Security 3.2.5。我为我的身份验证提供程序使用ActiveDirectoryLdapAuthenticationProvider。但是我想在通过Active Directory进行身份验证之前检查我的用户名和密码。 例如,在通过Active Directory启动身份验证过程之前,我想检查用户名和密码是否相同,并且其中没有空间或者其大小不小于特殊大小。在验证过程之前检查用户名和密码的有效性

更新: Spring Security没有允许使用空用户名和/或密码,并提高此异常: 验证请求失败:org.springframework.security.authentication.BadCredentialsException:坏凭据。

我有四处张望在不同的过滤器,我想我应该这样做在UsernamePasswordAuthenticationFilter检查,但我不知道,我不知道该怎么做。我非常感谢你的帮助。

在此先感谢。

最好的问候, /Samaneh

回答

1

默认的Spring Security应该如果用户试图提交一个空的用户名或密码错误。至于在LDAP认证尝试之前测试密码标准,这看起来固然不安全。通过测试一个先决条件,您可以让攻击者了解密码可能是什么。此外,短路LDAP绑定尝试将有效地规避在Active Directory中配置的任何最大无效尝试阈值。

简单地说,就认证而言,我们不想给用户提供任何特定的细节,而不是您提供的用户名和密码错误。

+0

感谢您的回复@MarkVieira。如您所说,Spring Security不允许空的用户名和密码,并且在它调用Active Directory之前,UsernamePasswordAuthenticationFilter引发此异常:
身份验证请求失败:org.springframework.security.authentication.BadCredentialsException:错误凭据。
但我希望Spring Security还检查用户名和密码是否相等,或者是否有空间。我知道我可以用其他方式做到这一点,比如javascript,但我想把所有这些约束放在一个地方,并由Spring Security来处理。 – Samaneh 2014-10-04 05:09:15

+0

正如您提到的@MarkVieira,如果错误消息显示了这些约束的详细信息,则可以将其输入给攻击者。但我想只有一个登录失败的错误消息。 – Samaneh 2014-10-04 05:09:42

+0

这样做的短路逻辑仍然可能以定时攻击的方式暴露漏洞。此外,用户帐户可能未被锁定的问题仍然是一个问题。我很想知道你的用例是什么?为什么不让AD简单地认证他们的凭证?在任何情况下,最好最好的办法可能是扩展'UsernamePasswordAuthenticationFilter',并且可能将你的逻辑放在重写的'setDetails()'方法中,并执行你的检查并抛出BadCredentialsException,否则只需调用超级实现。 – 2014-10-04 05:18:24