【发布时间】:2017-07-28 03:06:00
【问题描述】:
我正在使用 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 登录。但同时我想知道我已登录,以便我可以询问用户有关连接帐户和设置数据库的问题。
我如何提供让经过身份验证的用户向其用户帐户添加新社交帐户的功能?此外,我不依赖于添加新连接的特定工作流程;以上只是我的第一组实验。
- 春季社交 1.1.4
- Spring Boot 1.3.8
- Spring 安全性和 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
]
【问题讨论】:
标签: java spring spring-mvc spring-security spring-social