我很惊讶地看到没有明显的插件或设置来启用Grails中的任何类型的多因素身份验证。有优雅的解决方案吗?理想情况下,我希望实施一个TOTP解决方案,用于Google身份验证器或独立密钥卡等应用,但也会考虑使用基于短信的解决方案。
解决方案必须与内置的Spring Security身份验证很好地配合并增强。
答案 0 :(得分:1)
我在我构建的Web应用程序中做了类似的事情。我找不到像直接插件一样干净的东西,但我仍然可以将它与弹簧安全性集成。
所以基本上我最终做的是使用authy api(http://docs.authy.com/我相信你可以找到与google auth类似的东西)来进行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);
在我验证(再次使用可用的api)他们拥有有效TOTP后更新用户的角色。所以基本上你想要创建一个类来进行这个验证,并且只有在它运行之后才能导航到下一页(他们现在有权访问)