Spring Security: как авторизовать пользователя без пароля?

Здравствуйте,

Помогите понять как сделать автоматический вход через 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));
    }
}
  • Вопрос задан
  • 528 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы