Здравствуйте,
Помогите понять как сделать автоматический вход через oauth2.
Отправляю запрос в vk.com
String url = "https://api.vk.com/method/users.get"
+ "?uids={user_id}"
+ "&access_token={access_token}"
+ "&fields=uid,first_name,last_name,screen_name,sex,bdate,photo_100,photo_max_orig";
Map<String, List> result = getForObject(url, Map.class, userId, accessToken);
Получаю примерно такой ответ:
{uid=12345, first_name=xxx, last_name=xxx, sex=2, screen_name=xxx, bdate=1.5, photo_100=xxx, photo_max_orig=xxx}
Как я понимаю должна происходить аутентификация по
uid, но как реализуется ХЗ.
Соответственно поле
vk_id в бд существует.
Догадался сделать так, но на сколько это правильно еще не уверен.
@Autowired
private UserService userService;
....
UserDetails userDetails = userService.loadUserByOauth2("vk", 12345);
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()));
public class UserService implements UserDetailsService {
public UserDetails loadUserByOauth2(String provider, int clientId) throws UsernameNotFoundException {
UserDomain userDomain = userMapper.getUserByOauth2(clientId);
GrantedAuthority authority = new SimpleGrantedAuthority("ROLE_" + userDomain.getRole());
return new User(userDomain.getEmail(), userDomain.getPassword(), Arrays.asList(authority));
}
}