Facebook Spring Boot войти с помощью OAuth2 - PullRequest
0 голосов
/ 20 мая 2019

Я создаю проект с помощью Spring Boot и Spring Security, и я хотел бы реализовать этап регистрации с Facebook и Google.Я читал об OAuth2, но не смог найти ни одного руководства, которое бы точно указывало, что нужно сделать, чтобы пользователь зарегистрировался в моем сервисе через Facebook или Google.Я хотел бы иметь ссылку в моей базе данных, которая говорит мне, что этот конкретный пользователь зарегистрирован, например, на Facebook ... Сейчас я использую Spring Security для обработки этапов регистрации и входа, и все работает нормально.

Это класс конфигурации

@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
@EnableJpaRepositories(basePackageClasses = UserRepository.class)
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomUserDetailsService userDetailsService;

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .formLogin()
                    .loginPage("/login")
                    .failureUrl("/login?error=true")
                    .and()
                .logout()
                    .logoutSuccessUrl("/")
                    .deleteCookies("JSESSIONID")
                    .invalidateHttpSession(true);
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

И это класс CustomUserDetails, который, я полагаю, должен иметь также атрибут, который сообщает, как этот пользователь регистрируется в моей службе (facebook, google, local и т. Д.)..)

public class CustomUserDetails extends User implements UserDetails {

    public CustomUserDetails() {
    }

    public CustomUserDetails(String username, String email, String password, Set<Role> roles) {
        super(username, email, password, roles);
    }

    public CustomUserDetails(User user) {
        super(user.getUsername(), user.getEmail(), user.getPassword(), user.getRoles());
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return getRoles()
                .stream()
                .map(role -> new SimpleGrantedAuthority(role.getRole()))
                .collect(Collectors.toList());
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

}

1 Ответ

1 голос
/ 20 мая 2019

В общем, чтобы войти через Facebook или Google, у нас есть следующие шаги:

  1. Пользователь нажимает Войти через Facebook или Войти через Google

  2. Отображается всплывающее окно и пользователь нажимает Принять .

  3. Пользователь получает access_token от Facebookили Google и отправьте его вам (веб-сервер)

  4. Используйте пользователя access_token и подтвердите его с помощью Google или Facebook API и получите информацию о пользователе.

  5. Если access_token правильно, вы создаете пользователя для него.Вы можете использовать либо токен, либо сеанс.Если access_token неверно, наберите exception.

  6. Успешный вход в систему.

Получить дополнительную информацию о access_token:https://developers.facebook.com/docs/facebook-login/access-tokens/

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...