Я создаю проект с помощью 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;
}
}