Een secundaire Facebook-login met Spring Social

1. Overzicht

In deze tutorial zullen we ons concentreren op het toevoegen van een nieuwe Facebook-login aan een bestaande formulier-login-app.

We gaan de Spring Social-ondersteuning gebruiken om met Facebook te communiceren en de zaken netjes en eenvoudig te houden.

2. Maven-configuratie

Eerst zullen we moeten toevoegen lente-social-facebook afhankelijkheid van onze pom.xml:

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

3. Beveiligingsconfiguratie - Gewoon inloggen via het formulier

Laten we eerst beginnen met de eenvoudige beveiligingsconfiguratie waarbij we alleen op formulieren gebaseerde authenticatie hebben:

@Configuration @EnableWebSecurity @ComponentScan (basePackages = {"com.baeldung.security"}) public class SecurityConfig breidt WebSecurityConfigurerAdapter uit {@Autowired private UserDetailsService userDetailsService; @Override protected void configure (AuthenticationManagerBuilder auth) genereert Uitzondering {auth.userDetailsService (userDetailsService); } @Override protected void configure (HttpSecurity http) genereert uitzondering {http .csrf (). Disable () .authorizeRequests () .antMatchers ("/ login *"). AllowAll () .anyRequest (). Geverifieerd (). En ( ) .formLogin (). loginPage ("/ login"). allowAll (); }}

We gaan niet veel tijd besteden aan deze configuratie - als je het beter wilt begrijpen, bekijk dan het artikel over inloggen op het formulier.

4. De Facebook-eigenschappen

Laten we vervolgens de Facebook-eigenschappen configureren in onze application.properties:

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

Let daar op:

  • We moeten een Facebook-applicatie maken om appId en appSecret
  • Zorg ervoor dat u vanuit de instellingen van de Facebook-applicatie Platform “Website” toevoegt en // localhost: 8080 / is de ‘Site-URL’

5. Beveiligingsconfiguratie - Facebook toevoegen

Laten we nu een nieuwe manier toevoegen om in het systeem te authenticeren - aangestuurd door Facebook:

public class SecurityConfig breidt WebSecurityConfigurerAdapter uit {@Autowired privé FacebookConnectionSignup facebookConnectionSignup; @Value ("$ {spring.social.facebook.appSecret}") String appSecret; @Value ("$ {spring.social.facebook.appId}") String appId; @Override protected void configure (HttpSecurity http) genereert uitzondering {http .authorizeRequests () .antMatchers ("/ login *", "/ signin / **", "/ signup / **"). AllowAll () ...} @Bean openbare ProviderSignInController providerSignInController () {ConnectionFactoryLocator connectionFactoryLocator = connectionFactoryLocator (); UsersConnectionRepository usersConnectionRepository = getUsersConnectionRepository (connectionFactoryLocator); ((InMemoryUsersConnectionRepository) usersConnectionRepository) .setConnectionSignUp (facebookConnectionSignup); retourneer nieuwe ProviderSignInController (connectionFactoryLocator, usersConnectionRepository, nieuwe FacebookSignInAdapter ()); } privé ConnectionFactoryLocator connectionFactoryLocator () {ConnectionFactoryRegistry registry = nieuwe ConnectionFactoryRegistry (); registry.addConnectionFactory (nieuwe FacebookConnectionFactory (appId, appSecret)); terugkeerregister; } private UsersConnectionRepository getUsersConnectionRepository (ConnectionFactoryLocator connectionFactoryLocator) {retourneer nieuwe InMemoryUsersConnectionRepository (connectionFactoryLocator); }}

Laten we de nieuwe configuratie zorgvuldig bekijken:

  • we gebruiken een ProviderSignInController om de Facebook-authenticatie in te schakelen, waarvoor twee dingen nodig zijn:

    eerst een ConnectionFactoryLocator geregistreerd als een FacebookVerbindingFabriek met de Facebook-eigenschappen die we eerder hebben gedefinieerd.

    ten tweede een InMemoryUsersConnectionRepository.

  • door een POST naar "/ aanmelden / facebook”- deze controller start de aanmelding van een gebruiker via de Facebook-serviceprovider
  • we zetten een SignInAdapter om de inloglogica in onze applicatie af te handelen
  • en we hebben ook een ConnectionSignUp om het aanmelden van gebruikers impliciet af te handelen wanneer ze zich voor het eerst authenticeren bij Facebook

6. De aanmeldingsadapter

Simpel gezegd, deze adapter is een brug tussen de bovenstaande controller - die de aanmeldingsstroom van Facebook-gebruikers aanstuurt - en onze specifieke lokale applicatie:

public class FacebookSignInAdapter implementeert SignInAdapter {@Override public String signIn (String localUserId, Connection connection, NativeWebRequest request) {SecurityContextHolder.getContext (). setAuthentication (new UsernamePasswordAuthenticationToken (connection.getDisplayName (), null, Arrays (new) ")))); null teruggeven; }}

Houd er rekening mee dat gebruikers die zijn ingelogd met Facebook, een rol hebben FACEBOOK GEBRUIKER, terwijl gebruikers die zijn ingelogd met het formulier, een rol zullen hebben GEBRUIKER.

7. Verbinding aanmelden

Wanneer een gebruiker zich voor de eerste keer authenticeert bij Facebook, heeft hij geen bestaand account in onze applicatie.

Dit is het punt waarop we dat account automatisch voor hen moeten aanmaken; we gaan een ConnectionSignUp om die logica voor het maken van gebruikers te stimuleren:

@Service openbare klasse FacebookConnectionSignup implementeert ConnectionSignUp {@Autowired privé UserRepository userRepository; @Override public String uitvoeren (verbindingsverbinding) {User user = nieuwe gebruiker (); user.setUsername (connection.getDisplayName ()); user.setPassword (randomAlphabetic (8)); userRepository.save (gebruiker); return user.getUsername (); }}

Zoals u kunt zien, hebben we een account gemaakt voor de nieuwe gebruiker - met behulp van hun Weergavenaam als gebruikersnaam.

8. De voorkant

Laten we tot slot eens kijken naar onze voorkant.

We krijgen nu ondersteuning voor deze twee authenticatiestromen - inloggen via formulier en Facebook - op onze inlogpagina:

 U bent uitgelogd. Er is een fout opgetreden, probeer het opnieuw 

Eindelijk - hier is het index.html:

Gebruikersnaam

Uitloggen

Gebruikersbevoegdheden

Merk op hoe deze indexpagina gebruikersnamen en bevoegdheden weergeeft.

En dat is alles - we hebben nu twee manieren om ons in de applicatie te authenticeren.

9. Conclusie

In dit korte artikel hebben we geleerd hoe u lente-social-facebook om een ​​secundaire authenticatiestroom voor onze applicatie te implementeren.

En natuurlijk, zoals altijd, is de broncode volledig beschikbaar op GitHub.


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