Sekundárne prihlásenie na Facebook so službou Spring Social

1. Prehľad

V tejto príručke sa zameriame na pridanie nového prihlásenia na Facebook do existujúcej aplikácie na prihlásenie pomocou formulára.

Budeme využívať jarnú sociálnu podporu na interakciu s Facebookom a udržiavať veci čisté a jednoduché.

2. Konfigurácia Maven

Najskôr budeme musieť pridať jar-social-facebook závislosť na našom pom.xml:

 org.springframework.social spring-social-facebook 2.0.3.RELEASE 

3. Konfigurácia zabezpečenia - stačí prihlásiť sa do formulára

Najprv začnime od jednoduchej konfigurácie zabezpečenia, kde máme iba overenie na základe formulára:

@Configuration @EnableWebSecurity @ComponentScan (basePackages = {"com.baeldung.security"}) verejná trieda SecurityConfig rozširuje WebSecurityConfigurerAdapter {@Autowired private UserDetailsService userDetailsService; @Override protected void configure (AuthenticationManagerBuilder auth) vyvolá výnimku {auth.userDetailsService (userDetailsService); } @Override protected void configure (HttpSecurity http) vyvolá výnimku {http .csrf (). Disable () .authorizeRequests () .antMatchers ("/ login *"). PermitAll () .anyRequest (). Authenticated (). A ( ) .formLogin (). loginPage ("/ login"). permitAll (); }}

Nebudeme tráviť veľa času touto konfiguráciou - ak tomu chcete lepšie porozumieť, pozrite si článok na prihlásenie do formulára.

4. Vlastnosti Facebooku

Ďalej nakonfigurujme vlastnosti Facebooku v našom application.properties:

spring.social.facebook.appId = YOUR_APP_ID spring.social.facebook.appSecret = YOUR_APP_SECRET

Poznač si to:

  • Potrebujeme vytvoriť aplikáciu na Facebooku, aby sme ju mohli získať appId a appSecret
  • V nastaveniach aplikácie Facebook nezabudnite pridať „Webovú stránku“ platformy a // localhost: 8080 / je „adresa URL stránky“

5. Konfigurácia zabezpečenia - pridanie Facebooku

Teraz pridajme nový spôsob autentifikácie do systému - založený na Facebooku:

verejná trieda SecurityConfig rozširuje WebSecurityConfigurerAdapter {@Autowired private FacebookConnectionSignup facebookConnectionSignup; @Value ("$ {spring.social.facebook.appSecret}") Reťazec appSecret; @Value ("$ {spring.social.facebook.appId}") String appId; @Override protected void configure (HttpSecurity http) vyvolá výnimku {http .authorizeRequests () .antMatchers ("/ login *", "/ signin / **", "/ signup / **"). PermitAll () ...} @Bean public ProviderSignInController providerSignInController () {ConnectionFactoryLocator connectionFactoryLocator = connectionFactoryLocator (); UsersConnectionRepository usersConnectionRepository = getUsersConnectionRepository (connectionFactoryLocator); ((InMemoryUsersConnectionRepository) usersConnectionRepository) .setConnectionSignUp (facebookConnectionSignup); vrátiť nový ProviderSignInController (connectionFactoryLocator, usersConnectionRepository, nový FacebookSignInAdapter ()); } súkromný ConnectionFactoryLocator connectionFactoryLocator () {register ConnectionFactoryRegistry = nový ConnectionFactoryRegistry (); registry.addConnectionFactory (nový FacebookConnectionFactory (appId, appSecret)); návratový register; } private UsersConnectionRepository getUsersConnectionRepository (ConnectionFactoryLocator connectionFactoryLocator) {return new InMemoryUsersConnectionRepository (connectionFactoryLocator); }}

Pozrime sa pozorne na novú konfiguráciu:

  • používame a ProviderSignInController povoliť autentifikáciu na Facebooku, ktorá vyžaduje dve veci:

    najskôr, a ConnectionFactoryLocator registrované ako FacebookConnectionFactory s vlastnosťami Facebooku, ktoré sme definovali skôr.

    druhý, an InMemoryUsersConnectionRepository.

  • zaslaním a POST/ prihlásenie / facebook„- tento radič iniciuje prihlásenie používateľa pomocou poskytovateľa služieb Facebooku
  • zakladáme a SignInAdapter na spracovanie logiky prihlásenia v našej aplikácii
  • a tiež zakladáme a ConnectionSignUp na implicitné vybavenie registrácie používateľov pri ich prvej autentifikácii pomocou Facebooku

6. Prihlasovací adaptér

Zjednodušene povedané, tento adaptér je mostom medzi radičom vyššie - riadiacim tok prihlásenia používateľov Facebooku - a našou konkrétnou lokálnou aplikáciou:

verejná trieda FacebookSignInAdapter implementuje SignInAdapter {@Override public String signIn (String localUserId, pripojenie pripojenia, požiadavka NativeWebRequest) {SecurityContextHolder.getContext (). setAuthentication (nové UsernamePasswordAuthenticationToken (connection.getDisplayName (), null, Arrays.aseras ")))); návrat null; }}

Upozorňujeme, že úlohu budú mať používatelia prihlásení pomocou Facebooku POUŽÍVATEĽ FACEBOOKU, zatiaľ čo používatelia prihlásení pomocou formulára budú mať rolu UŽÍVATEĽ.

7. Zaregistrujte sa

Keď sa používateľ autentizuje na Facebooku prvýkrát, nemá v našej aplikácii žiadny účet.

Toto je bod, v ktorom pre nich musíme automaticky vytvoriť tento účet; budeme používať a ConnectionSignUp riadiť túto logiku vytvárania používateľov:

@ Verejná trieda @Service FacebookConnectionSignup implementuje ConnectionSignUp {@Autowired private UserRepository userRepository; @ Override public String execute (Pripojenie k pripojeniu) {User user = new User (); user.setUsername (connection.getDisplayName ()); user.setPassword (randomAlphabetic (8)); userRepository.save (užívateľ); vrátiť user.getUsername (); }}

Ako vidíte, vytvorili sme účet pre nových používateľov - pomocou ich Zobraziť meno ako používateľské meno.

8. Klientske rozhranie

Na záver sa pozrime na naše klientske rozhranie.

Teraz budeme mať podporu pre tieto dva toky autentifikácie - prihlásenie pomocou formulára a Facebook - na našej prihlasovacej stránke:

 Boli ste odhlásení. Vyskytla sa chyba, skúste to znova 

Nakoniec - tu je index.html:

Užívateľské meno

Odhlásiť sa

Orgány používateľa

Všimnite si, ako táto indexová stránka zobrazuje používateľské mená a oprávnenia.

A je to - teraz máme dva spôsoby overenia totožnosti v aplikácii.

9. Záver

V tomto rýchlom článku sme sa naučili, ako používať jar-social-facebook implementovať sekundárny autentifikačný tok pre našu aplikáciu.

A samozrejme ako vždy je zdrojový kód plne k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found