2015-01-06 15 views
6

InsommaDevo utilizzare sia SocialAuthenticationFilter e ProviderSignInController insieme

eventi di autenticazione non vengono generati quando si utilizza ProviderSigninController. Come posso utilizzare l'integrazione completa di sicurezza a molla?

Long Version

Al meglio della mia comprensione Ho una configurazione funzionale Primavera-sociale che opera come segue:

ProviderSignInController è configurato per creare connessioni sociali e automaticamente il provisioning degli account utente quando un nuovo utente appare. Uso un SignInAdapter, come mostrato dallo documented example,

Ho anche un servizio di autenticazione basato sulla sicurezza primaverile che utilizza un servizio UserDetails.

Tuttavia, una differenza che ho visto è che l'accesso di autenticazione sociale non genera alcun * AuthenticationEvents. Questi eventi sono generati dal filtro per account regolari.

Mi chiedo - Mi manca qualche parte di questa integrazione?.
Sembra un po 'vulnerabile NON passa attraverso il SocialAuthenticationFilter e semplicemente imposta manualmente il contesto di autenticazione.

Desidero un posto centrale per la registrazione degli eventi di autenticazione.

+0

Ho lo stesso problema. Avete notizie su questo? Grazie. – alexanoid

+1

No spiacenti. Non sono sicuro se ci sono miglioramenti/aggiornamenti alla sicurezza di primavera da quando ho postato questo. –

risposta

1

Avevo una situazione simile in cui volevo utilizzare il SocialAuthenticationFilter per l'autenticazione e la registrazione implicita con Spring Security, piuttosto che il ProviderSignInController (sono d'accordo che si sente un po 'sporco usando il controller).

L'ho collegato a & ha funzionato principalmente, ma ho perso gli eventi onAuthenticationSuccess che il normale accesso mi ha dato.

Quello che ho finalmente fatto per far funzionare il mio filtro come avevo bisogno, era aggiungere un ObjectPostProcessor. Questo mi ha permesso di impostare manualmente il mio AuthenticationSuccessHandler dopo che il filtro era stato inizializzato in profondità all'interno di SpringSocialConfigurer (senza un handle su di esso).

Ecco uno snippet.

  // 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;  
         } 
        }); 

loginSuccessHandler, è proprio la stessa fava ho impostato nella mia configurazione normale filtro via, .formLogin().successHandler(loginSuccessHandler).

Puoi anche impostare il tuo erroreHandler qui.

Questo ha servito i miei scopi ok. La soluzione ora utilizza il mio SocialUserDetailsService per auth e ConnectionSignUp per la registrazione implicita (se registrato su UsersConnectionRepository).

Spero che questo aiuti.

Problemi correlati