0

我正在尝试在我的 Spring 应用程序中实现两个因素身份验证。

期望的情况

我希望用户首先使用他的用户名和密码登录,如果这些都是正确的,我希望系统生成一个随机密钥并将其通过电子邮件发送给用户。之后,系统必须将用户重定向到一个页面,他只需输入令牌并登录到系统。

到目前为止我得到了什么(在伪代码中)

用户进入 login.jsp 页面。使用用户名/密码登录后,系统会发出 CustomMade AuthenticationException。在 AuthenticationFailureHandler 中,我对异常执行 getAuthentication(我知道弃用)但我使用用户名向用户发送他的令牌。之后,我将异常放入会话中(使用 request.getSession().setAttribute ),最后系统重新加载 login.jsp。

Login.jsp 在会话中看到异常并显示令牌输入字段。用户填写令牌输入字段并登录。系统使用会话中的凭据和给定令牌对用户进行身份验证。

问题

我认为在会话中保存用户名/密码是不好的做法。我想到了两种可能的解决方案:

  1. 检查用户名/密码后。将用户名保存在静态变量或数据库中。当用户输入令牌时,检查用户名是否在变量/db中并检查令牌。如果令牌正确,请使用用户登录。

  2. 检查用户名/密码后,以低角色登录用户。低角色用户只能进入token页面,输入有效token后系统会赋予用户新的权限。

实施的最佳解决方案是什么?

4

0 回答 0