繁体   English   中英

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

[英]Adding new Spring Social connections to the same user

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

我正在尝试支持使单个用户(即org.springframework.security.core.userdetails.UserDetails )具有多个Spring Social连接的功能。 这样,用户可以使用其Google凭据或Facebook凭据登录。

如果直接进入数据库,则可以进行此配置。 然后,我可以登录到同一Spring Security帐户以进行不同的Spring Social连接。 问题是用户添加新连接的时间点。 我将给出一个示例,假设我已通过Google帐户登录并想要添加Facebook。

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

如何提供让经过身份验证的用户向其用户帐户添加新社交帐户的功能? 另外,我也不局限于添加新连接的特定工作流程; 以上只是我的第一组实验。

  • 春季社交1.1.4
  • 春季靴1.3.8
  • Spring Security和MVC-由Spring Boot 1.3.8指定

更新

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

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

Spring Social可能不是问题,而是Spring Security。 如果您有一个匿名用户登录,则意味着AnonymousAuthenticationFilter会在您的用户或SocialAuthenticationFilter之前SocialAuthenticationFilter

将spring安全性切换为调试:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

并检查涉及哪些过滤器。 我很确定您具有匿名过滤器,该过滤器可启动不需要的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM