我应该同时使用SocialAuthenticationFilter和ProviderSignInController吗?

Rob*_*erd 6 java authentication spring spring-security spring-social

简而言之

使用ProviderSigninController时不会触发身份验证事件.如何使用完整的Spring安全集成?

长版

据我所知,我有一个功能性的Spring-social设置如下:

ProviderSignInController设置为创建社交连接,并在新用户出现时自动配置用户帐户.我使用SignInAdapter,如文档示例所示,

我还使用UserDetailsS​​ervice定期进行基于spring-security的身份验证服务.

但是,我看到的一个区别是社交身份验证登录不会引发任何*AuthenticationEvents.这些事件被过滤器定期账户提高.

我想知道 - 我是否错过了这种整合的一部分?.
看起来有点脆弱,不通过SocialAuthenticationFilter,只需手动设置auth上下文.

我想要一个记录认证事件的中心位置.

wal*_*ron 2

我也遇到过类似的情况,我想使用 SocialAuthenticationFilter 进行身份验证并通过 Spring Security 进行隐式注册,而不是 ProviderSignInController (我同意使用控制器感觉有点脏)。

我把它连接起来并且大部分工作正常,但是我丢失了正常登录给我的 onAuthenticationSuccess 事件。

为了让过滤器按我的需要工作,我最终所做的就是向其中添加一个 ObjectPostProcessor。这允许我在 SpringSocialConfigurer 深处初始化过滤器后手动设置 AuthenticationSuccessHandler (没有句柄)。

这是一个片段。

            // Spring Social configurer integrates with Spring Security for us
            .and().apply(new SpringSocialConfigurer()
                    .postLoginUrl("/")
                    // other setup
                    .addObjectPostProcessor(new ObjectPostProcessor<SocialAuthenticationFilter>() {
                        @Override
                        public <O extends SocialAuthenticationFilter> O postProcess(O filter) {
                            filter.setAuthenticationSuccessHandler(loginSuccessHandler);
                            return filter;    
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

loginSuccessHandler,与我通过,在正常过滤器配置中设置的 bean 相同.formLogin().successHandler(loginSuccessHandler)

您还可以在此处设置 failureHandler。

这符合我的目的。该解决方案现在使用我的 SocialUserDetailsS​​ervice 进行身份验证,并使用 ConnectionSignUp 进行隐式注册(在 UsersConnectionRepository 上注册时)。

希望这可以帮助。