我很惊讶地发现在Grails中没有明显的插件或设置来启用任何类型的多因素身份验证。是否有一个优雅的解决方案?理想情况下,我想实现一个TOTP解决方案与应用程序,如谷歌认证或独立的fob使用,但也会考虑基于文本消息的解决方案。
解决方案必须很好地配合并增强内置的Spring Security身份验证。
我在我构建的web应用程序中做了类似的事情。我找不到任何像直接插件那样干净的东西,但我仍然能够将它与spring安全性集成在一起。
所以基本上我最终做的是使用授权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。所以基本上你需要创建一个类来做这个验证只有在它运行之后你才能导航到下一页(他们现在有权限访问)