Spring Security 4 2FA

Posted

技术标签:

【中文标题】Spring Security 4 2FA【英文标题】: 【发布时间】:2015-10-22 10:06:09 【问题描述】:

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

【问题讨论】:

有很多方法可以做到这一点。最简单的方法是:只允许匿名访问登录页面;湾。仅允许经过身份验证的用户访问 OTP 代码输入页面; C。仅允许具有特定角色的经过身份验证的用户访问所有其他页面。然后,成功登录后将用户重定向到 OTP 代码输入页面。成功进入 OTP 后,将强制角色授予用户。有关此策略的示例实现,请参阅this post。 【参考方案1】:

所以基本上我最终做的是使用 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 后更新用户的角色。

【讨论】:

这里是涵盖它的文档的链接docs.spring.io/spring-security/site/docs/4.0.2.RELEASE/…

以上是关于Spring Security 4 2FA的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security入门(3-4)Spring Security 异常处理异常传递和异常获取

Spring Security:3. What’s New in Spring Security 4.2 (新功能)

Spring Security - 访问被拒绝(用户不是匿名的)spring-security-core-4.0.3.RELEASE

Grails 2.4.4 中的 Spring Security 插件问题

如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config

Maven Repository 上 4.1.1 中的 spring-security-web 在哪里?