Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 24

Авторизация spring oauth2

20.09.2017, 23:38. Показов 2808. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Начинаю разбираться со spring security, rest и и так далее
Есть стандартная авторизация с использованием кастомного userdetailservice (используя форму логин и пароль), возник вопрос, как к этому прикрутить oauth2.
WebSecurityConfigurerAdapter:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception{
        httpSecurity.csrf().disable();
        httpSecurity.authorizeRequests()
                .antMatchers("/", "/home","/registration", "/css/**", "/js/**").permitAll()
                .antMatchers("/adminpanel/**").hasRole("admin")
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
               ;
    }
 
    @Autowired
    private CustomUserDetailService userDetailsService;
    @Override
    protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
       authenticationManagerBuilder.userDetailsService(userDetailsService)
               .passwordEncoder(getPasswordEncoder());
    }


CustomUserDetailService:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 @Autowired
    private UserRepository userRepository;
    @Autowired
    private RoleRepository roleRepository;
 
    private BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
 
 
    @Override
    public  UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
        Optional<User> optionalUser = userRepository.findByName(name);
       optionalUser.orElseThrow(() -> new UsernameNotFoundException("Username not found"));
       return optionalUser.map(CustomUserDetails::new).get();
   }



В целом хочу сделать так что бы был возможен логин как через форму так и через access_token oauth
пробовал просто добавить новый класс авторизационного сервера
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Autowired
    private AuthenticationManager authenticationManager;
 
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()");
    }
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
         .inMemory()
         .withClient("clientid")
        .secret("secret")
         .authorizedGrantTypes("password")
        .scopes("user_info")
         .autoApprove(true);
    }
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
 
        endpoints.authenticationManager(authenticationManager);
    }


Но при запросе в постмане токена("/oauth/token"), он редиректится на страницу логина( этот урл пробовал добавлять в фильтр permitAll, но все равно происходит редирект на форму логина и пароля)

Добавлено через 45 минут
PS. Вроде начало работать, но не подходит пароль. Т к в бд он хранится в зашифрованном виде, а постман отправляет чистый. Как правильно и грамотно это реализовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2017, 23:38
Ответы с готовыми решениями:

Oauth2 authentication with spring security
Доброго времени суток, я пытаюсь сделать на своем сайте авторизацию с помощью других сервисов. На данный момент есть google, facebook и vk....

VK oauth2 client_secret is undefined Spring5 oAuth2
spring: datasource: url: jdbc:mysql://localhost:3306/bydb?serverTimezone=UTC&amp;useSSL=false username: root ...

Spring Rest авторизация
Здравтсвуйте! Хочу сделать доступ на rest сервис через токены. Логика такая: 1) Клиент идет по /auth, передавая логин и пароль....

8
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
21.09.2017, 11:48
Цитата Сообщение от alexch Посмотреть сообщение
Т к в бд он хранится в зашифрованном виде, а постман отправляет чистый.
очевидно надо на сервере его шифровать и сравнивать получившейся хеш с БД
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 24
21.09.2017, 12:21  [ТС]
KEKCoGEN, Это очевидно. у меня возникает вопрос как это лучше всего реализовать, даже я бы сказал как две авторизации собрать в одну. Т е сейчас если юзер логинится через сайт то срабатывает вот этот код
сlass WebSecurityConfigurerAdapter extends ... :
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
 @Override
    protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
       authenticationManagerBuilder.userDetailsService(userDetailsService)
               .passwordEncoder(getPasswordEncoder());
    }


А если отсылать запрос постманом, то я так понимаю, что срабатывает вот этот код class AuthServer extends..:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
 
 
 
        security.tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()")
 
        ;
    }
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
         .inMemory()
         .withClient("clientid")
        .secret("secret")
         .authorizedGrantTypes("password")
        .scopes("user_info")
         .autoApprove(true);
    }
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
 
        endpoints.authenticationManager(authenticationManager);
 
    }


т е мне как-то отловить пароль и заэнкриптить во втором случае? ((AuthorizationServerEndpointsConfigurer endpoints)
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 24
23.09.2017, 11:49  [ТС]
Немного поковырялся, приходит access_token, но при переходе на какой-нибудь урл вида /blabla?access_token=svdivbsidbv то все равно происходит редирект на страницу авторизации. Может кто подскажет что нужно изменить в настройках фильтра?
WebSecurityConfigurerAdapter:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@EnableJpaRepositories()
@Configuration
@EnableWebSecurity
@EnableResourceServer
@EnableAuthorizationServer
 
public class WebSecurityConfigurerAdapter  extends org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter{
    @Autowired
    private AuthenticationManager authenticationManager;
 
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.csrf().disable();
       httpSecurity.authorizeRequests()
                .antMatchers("/", "/home", "/registration", "/css/**", "/js/**").permitAll()
                .antMatchers("/adminpanel/**").hasRole("admin")
                .antMatchers("/rest/**").authenticated()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
 
 
        ;
    }
 
 
    @Autowired
    private CustomUserDetailService userDetailsService;
 
    @Override
    protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
        authenticationManagerBuilder.userDetailsService(userDetailsService)
                .passwordEncoder(getPasswordEncoder());
    }
 
    private PasswordEncoder getPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
 
}
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
23.09.2017, 14:15
Цитата Сообщение от alexch Посмотреть сообщение
то все равно происходит редирект на страницу авторизации.
Если я вас правильно понял...
в четвертом spring'e изменился порядок выполнения фильтров. Суть в том, что теперь фильтры web security выполняются раньше oauth фильтров. Для того что бы это поправить в application.properties добавьте строку
Bash
1
security.oauth2.resource.filter-order = 3
Цитата Сообщение от alexch Посмотреть сообщение
но при переходе на какой-нибудь урл вида /blabla?access_token=svdivbsidbv
а разве access_token не в header нужно слать?
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 24
24.09.2017, 11:08  [ТС]
reisal78, все верно. В настройках это стоит. Я проверял через урл потому что так работало в другом проекте только с авторизацией oauth.
Пробовал в постмане указывать в заголовке autorization: bearer и аксес токен. Все равно редиректор на страницу логин

Добавлено через 7 часов 8 минут
Но так же у меня стоит аннотации @order(1) для рест фильтра и order 2 для веб фильтра

Добавлено через 13 часов 2 минуты
Кажется, что фильтр для rest не срабатывает просто
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
24.09.2017, 11:16
Цитата Сообщение от alexch Посмотреть сообщение
что фильтр для rest не срабатывает просто
Это было очевидно когда вы написали что вас редиректит на страницу авторизации =)
выложите ваш проект на гитхаб, не видя полностью картины сложно что то посоветовать
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 24
24.09.2017, 12:13  [ТС]
reisal78, немного стыдно такое показывать, если честно, но вот: https://github.com/supervtb/sp... in/java/by

Добавлено через 16 минут
По отдельности фильтры работают. А в связке нет
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 24
29.09.2017, 16:06  [ТС]
Начал ковыряться опять. В общем фильтры работают параллельно (если открыть доступ в одном урл вида "/rest/**", то открывается только этот, а остальные настройки доступа берутся из другого фильтра) , аксесс токен приходит, но проблема в том что если посылаю аксесс токен в заголовке то все равно приходит ответ 403

Рест фильтр:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
@Order(1)
@EnableResourceServer
@EnableWebSecurity
public class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
 protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/rest/**")
        .authorizeRequests()
                .antMatchers("/rest/**") .authenticated()
        .anyRequest()
        .authenticated()
                ;
 
 }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2017, 16:06
Помогаю со студенческими работами здесь

Авторизация не работает при включенной CSRF защите Spring Security
Здравствуйте вот столкнулся с такой проблемой при попытке авторизации получал ответ 403 forbidden и никаких логов хотя, интрецептор...

Google OAuth2 и spring rest
Всем привет, понадобилось мне сделать приложенице: рест сервис с аутентификацией + клиент на андройде. Андройд пользователя решил...

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

Перевод проекта из Spring Maven в обычный Spring MVC
Здравствуйте. Подскажите, реально ли взять готовый проект, например -...

задания по spring core и spring mvc для новичков
Какие задания можно предложить новичкам для выполнения после знакомства их с spring core и mvc ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru