Рубрики
Без рубрики

Вторичный Facebook Логин с весенней социальной

Быстрый взгляд на реализацию facebook управляемой аутентификации рядом со стандартным приложением весна формы входа.

Автор оригинала: baeldung.

Вторичный Facebook Логин с весенней социальной

1. Обзор

В этом учебнике мы сосредоточимся на добавлении нового входа Facebook в существующее приложение для входа в форму.

Мы будем использовать весеннюю социальную поддержку, чтобы взаимодействовать с Facebook и держать вещи чистыми и простыми.

2. Конфигурация Maven

Во-первых, нам нужно будет добавить весенне-социально-facebook зависимость от нашей пом.xml :


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

3. Безопасность Config – Просто форма входа

Давайте сначала начнем с простой конфигурации безопасности, где у нас просто есть проверка подлинности на основе формы:

@Configuration
@EnableWebSecurity
@ComponentScan(basePackages = { "com.baeldung.security" })
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) 
      throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers("/login*").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin().loginPage("/login").permitAll();
    } 
}

Мы не собираемся тратить много времени на эту конфигу – если вы хотите понять это лучше, посмотрите на форму войти статьи .

4. Свойства Facebook

Далее давайте настраивать свойства Facebook в нашем application.properts :

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

Обратите внимание, что:

  • Нам нужно создать приложение Facebook, чтобы получить appId и appSecret
  • Из настроек приложения Facebook, убедитесь, что добавить платформу “Веб-сайт” http://localhost:8080/ является “URL-адрес сайта”

5. Конфиг безопасности – Добавление Facebook

Теперь давайте добавим новый способ проверки подлинности в системе , управляемый Facebook:

public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private FacebookConnectionSignup facebookConnectionSignup;

    @Value("${spring.social.facebook.appSecret}")
    String appSecret;
    
    @Value("${spring.social.facebook.appId}")
    String appId;
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
        .antMatchers("/login*","/signin/**","/signup/**").permitAll()
        ...
    } 

    @Bean
    public ProviderSignInController providerSignInController() {
        ConnectionFactoryLocator connectionFactoryLocator = 
            connectionFactoryLocator();
        UsersConnectionRepository usersConnectionRepository = 
            getUsersConnectionRepository(connectionFactoryLocator);
        ((InMemoryUsersConnectionRepository) usersConnectionRepository)
            .setConnectionSignUp(facebookConnectionSignup);
        return new ProviderSignInController(connectionFactoryLocator, 
            usersConnectionRepository, new FacebookSignInAdapter());
    }
    
    private ConnectionFactoryLocator connectionFactoryLocator() {
        ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();
        registry.addConnectionFactory(new FacebookConnectionFactory(appId, appSecret));
        return registry;
    }
    
    private UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator 
        connectionFactoryLocator) {
        return new InMemoryUsersConnectionRepository(connectionFactoryLocator);
    }
}

Давайте внимательно рассмотрим новую конфигу:

  • мы используем ПоставщикСинКонтроллер для проверки подлинности Facebook, которая нуждается в двух вещах:
    во-первых, ConnectionFactoryLocator
    зарегистрирован в качестве FacebookConnectionFactory
    с свойствами Facebook, которые мы определили ранее.
    во-вторых, InMemoryUsersConnectionRepository
    .
  • отправив POST к ” /Signin/facebook ” – этот контроллер будет инициировать пользователь войти в систему с помощью поставщика услуг Facebook
  • мы создаем SignInAdapter для обработки логики входа в нашем приложении
  • и мы также создаем ConnectionSignUp для обработки регистрации пользователей неявно, когда они впервые аутентификации с Facebook

6. Адаптер ва-в

Проще говоря, этот адаптер является мостом между контроллером выше – вождение Facebook пользователь войти в поток – и наши конкретные местные приложения:

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

Обратите внимание, что пользователи, военные в систему с помощью Facebook, будут иметь FACEBOOK_USER , в то время как пользователи вошли в систему с помощью формы будет иметь пользователь.

7. Подключение Зарегистрируйтесь

Когда пользователь впервые аутентиирует Facebook, у него нет существующей учетной записи в нашем приложении.

Это точка, где мы должны создать эту учетную запись автоматически для них; мы будем использовать ConnectionSignUp управлять логикой создания пользователя:

@Service
public class FacebookConnectionSignup implements ConnectionSignUp {

    @Autowired
    private UserRepository userRepository;

    @Override
    public String execute(Connection connection) {
        User user = new User();
        user.setUsername(connection.getDisplayName());
        user.setPassword(randomAlphabetic(8));
        userRepository.save(user);
        return user.getUsername();
    }
}

Как видите, мы создали учетную запись для нового пользователя, используя его DisplayName как имя пользователя.

8. Передняя часть

Наконец, давайте посмотрим на наш передний конец.

Теперь у нас будет поддержка этих двух потоков аутентификации – входа в форму и Facebook – на нашей странице входа:



You have been logged out
There was an error, please try again

Наконец – вот индекс.html :





Welcome, Username

User authorities

Обратите внимание, как на этой странице индекса отображаются имена пользователей и органы власти.

И это все – теперь у нас есть два способа проверки подлинности в приложении.

9. Заключение

В этой быстрой статье мы научились использовать весенне-социально-facebook для реализации вторичного потока аутентификации для нашего приложения.

И, конечно, как всегда, исходный код полностью доступен более на GitHub .