Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security: как авторизовать пользователя без пароля / 2 сообщений из 2, страница 1 из 1
04.02.2016, 23:26
    #39163398
Zhazhah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security: как авторизовать пользователя без пароля
Здравствуйте,

Помогите понять и сделать автоматический вход через oauth2. Отправляю запрос в vk.com

Код: java
1.
2.
3.
4.
5.
6.
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);



Получаю примерно такой ответ:
Код: javascript
1.
{uid=12345, first_name=xxx, last_name=xxx, sex=2, screen_name=xxx, bdate=1.5, photo_100=xxx, photo_max_orig=xxx}



Как мне авторизовать пользователя не имея пароля но имея uid=12345 ?
Соответственно поле vk_id в бд существует.


Пример обычной авторизации через Спринг Сисурити
SecurityConfig.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Autowired
private UserService userService;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder registry) throws Exception {
    //registry.inMemoryAuthentication().withUser("user").password("abc123").roles("USER");
    //registry.inMemoryAuthentication().withUser("admin").password("root123").roles("ADMIN");
    registry.userDetailsService(userService).passwordEncoder(new Md5PasswordEncoder());
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Service
public class UserService implements UserDetailsService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserDomain userDomain = userMapper.getUserByEmail(username);
        GrantedAuthority authority = new SimpleGrantedAuthority("ROLE_" + userDomain.getRole());
        return new User(userDomain.getEmail(), userDomain.getPassword(), Arrays.asList(authority));
    }

}




Вот еще пример принудительной авторизации, например после регистрации, но тоже с паролем:

Код: java
1.
2.
3.
4.
5.
SecurityContextHolder.getContext().setAuthentication(
                new UsernamePasswordAuthenticationToken(
                        user.getUsername(),
                        user.getPassword(),
                        user.getAuthorities()));




А как без пароля?
...
Рейтинг: 0 / 0
05.02.2016, 11:54
    #39163726
Zhazhah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security: как авторизовать пользователя без пароля
Можно так:

Код: java
1.
2.
3.
4.
UserDetails userDetails = userService.loadUserByOauth2("vk", 12345);
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
token.setDetails(new WebAuthenticationDetails(request));
SecurityContextHolder.getContext().setAuthentication(token);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security: как авторизовать пользователя без пароля / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]