使用Spring Security 3.2.x进行双页登录

时间:2013-12-31 22:22:37

标签: java spring security spring-mvc spring-security

我们是Java,Spring和Spring Security的新手,但对于开发并不陌生。我们已经能够创建一个基于Spring Security的Thymeleaf登录页面,该页面使用JNDI数据源使用BCrypt加密密码连接到我们的SQL Server数据库。所有这一切都顺利进行。但是,客户需要两阶段登录。第一页请求公司ID,然后加载具有该公司特定图形和文本的登录页面,这允许用户知道他们没有登录到网络钓鱼站点。然后,该登录页面将请求用户名和密码。

我们在这里和网络上进行了广泛的搜索,并没有找到一个可靠的方法来做到这一点。我们认为我们可能需要创建自定义UserDetailsServiceAuthenticationManager,但仍然无法看到如何实现它,以便:

  1. 用户无法绕过第一个登录屏幕并直接进入第二个屏幕
  2. SpringSecurity控制着两个页面
  3. 我们看到了一个关于在Spring Security中使用Spring WebFlow的建议,但没有一些起点,不知道WebFlow如何工作或适用于这种情况。这个网站帮助我们进入了这个阶段,但现在我们受到了阻碍。非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

这里应该有三个页面:

  1. 初始登录页面,其中包含要求您输入用户名的表单,而不是您的密码。
  2. 你没有提到这个,但我会检查客户端计算机是否被识别,如果没有,则用CAPTCHA或安全问题向用户提出质疑。否则,网络钓鱼站点可以简单地使用招标的用户名来查询真实站点以获取安全映像,这违背了拥有安全映像的目的。 (安全性问题在这里可能更好,因为使用CAPTCHA,攻击者可以让人类坐在那里回答CAPTCHA以获取安全图像。取决于你想要的偏执。)
  3. 之后显示安全图像并要求输入密码的页面。
  4. 我没有看到这个简短的线性流程足够复杂,无法保证使用Spring Web Flow。

    我会直接使用Spring Web MVC执行步骤1和2.我不会将Spring Security用作初始登录表单,因为Spring Security的登录表单需要密码和登录处理URL。同样,Spring Security不会为CAPTCHA或安全问题提供特殊支持,因此您可以再次使用Spring Web MVC。

    您可以使用Spring Security处理第3步,因为现在您拥有用户名和密码。表单登录页面应显示安全图像,并应包含用户提供的用户名作为隐藏表单字段,以便在用户提交登录表单时使Spring Security满意。进入第3步的唯一方法是在第1步(以及2,如果适用)成功提交POST

答案 1 :(得分:1)

我猜你的数据库将所有公司的所有用户存储在一个表中。您不会将不同公司的用户分成不同的表。如果是这种情况,则只需要一个登录页面。问题是,您有一个用户输入公司ID的第一页,您使用此ID获取JPG和徽标并将它们放在登录页面上。

请注意这没有安全利润。因为任何人都可以输入其他公司ID并获取不同公司的徽标,但可以尝试登录。这是你的要求吗?

问题是您的登录页面需要根据输入公司ID的上一页显示徽标和JPG。如果没有给出,则显示错误。所以你的登录页面需要有一些逻辑和输入 - 如果你把它变成一个JSP就很容易实现....

HTH