我正在使用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;
}
}
答案 0 :(得分:1)
概述,要通过Facebook或Google登录,我们需要执行以下步骤:
用户单击通过Facebook登录或通过Google登录
出现一个弹出窗口,用户单击接受。
用户从Facebook或Google获得access_token
并将其发送给您(Web服务器)
使用用户的access_token
并使用 Google或Facebook API 进行验证并获取用户信息。
如果access_token
是正确的,则为其创建用户。您可以使用令牌或会话。如果access_token
不正确,则抛出exception
。
登录成功。
获取有关access_token的更多信息: https://developers.facebook.com/docs/facebook-login/access-tokens/