向同一用户添加新的Spring Social连接

时间:2017-03-07 19:04:11

标签: java spring spring-mvc spring-security spring-social

我正在使用Spring Social以及Spring Boot和Spring Security。我使用Spring Social为我们的Web服务提供身份验证。这是使用SocialAuthenticationFilter方法完成的。

我试图支持让单个用户(即。org.springframework.security.core.userdetails.UserDetails)拥有多个Spring Social连接的能力。这样,用户就可以使用他的Google凭据或Facebook凭据登录。

如果我直接进入我的数据库,我可以进行此配置。然后,我可以为不同的Spring Social连接登录相同的Spring Security帐户。问题是用户添加新连接的点。我将假设我通过Google帐户登录并希望添加Facebook来举例说明我正在做的事情。

我是通过Google登录的。然后,如果我加载我的Spring Security formLogin().loginPage()或直接转到auth/facebook(标准的Spring Social Facebook登录URL),我可以执行Facebook身份验证。但是,结果是我当前的Authentication对象(来自SecurityContextHolder.getContext().getAuthentication())是匿名身份验证用户。这确实有意义,因为我刚刚使用Facebook登录。但与此同时,我想知道我已登录,以便我可以询问用户关于连接帐户和设置数据库的信息。

如何让经过身份验证的用户向其用户帐户添加新的社交帐户?此外,我没有依赖于添加新连接的特定工作流程;以上只是我的第一组实验。

  • Spring Social 1.1.4
  • Spring Boot 1.3.8
  • Spring Security& MVC - as 由Spring Boot 1.3.8
  • 指定

更新

根据Jerome的建议,我从Spring Security调试中提取了安全过滤器链:

Security filter chain: [
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  CsrfFilter
  LogoutFilter
  SocialAuthenticationFilter
  UsernamePasswordAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]

1 个答案:

答案 0 :(得分:0)

这可能不是Spring Social的问题,而是Spring Security。如果您有匿名用户登录,那么这意味着AnonymousAuthenticationFilter在您的用户之前就已开始使用,或SocialAuthenticationFilter

将弹簧安全性切换到调试:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

  @Override
  public void configure(WebSecurity web) throws Exception {
    web.debug(true);
  }
}

并检查涉及哪些过滤器。我很确定你有一个匿名的过滤器,可以解决不受欢迎的路径。