Spring Security 4 2FA

时间:2015-07-30 21:10:32

标签: spring security spring-mvc spring-security

所以我试图保护我使用spring mvc和security构建的Web应用程序。我目前拥有来自普通自定义登录页面的基本用户名和密码,该页面使用自定义身份验证提供程序来提供针对数据库验证的已填充身份验证对象。我想知道的是如何实现使用TOTP的第二阶段登录?我可以让TOTP发布和验证工作,但我不确定如何通过在我已指定的登录页面之外的页面上的令牌表单提交来修改spring安全性以接受对授权的更改。

1 个答案:

答案 0 :(得分:3)

基本上我最终做的就是使用authy api(http://docs.authy.com/)来进行TOTP传送和验证。在初始登录后,我授予他们ROLE_PRE_AUTH,然后将它们发送到受保护的页面以处理TOTP。然后我用

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(auth.getAuthorities());
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        Authentication newAuth = new UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), authorities);
        SecurityContextHolder.getContext().setAuthentication(newAuth);

一旦我确认他们有一个有效的TOTP,就更新用户的角色。