Java Spring Security 5 OAuth2 авторизация с помощью google и facebook

236
10 сентября 2018, 13:50

Я прочел этот туторчик и тоже решил сделать авторизацию через гугл и файсбук в своем тестовом приложении. Я абсолютно се сделал как в гайде. Но мое приложение почему то не конектится к странице которую я прописал как loginpage(/oauth_login). Не могу понять почему применяется автоматическая стандартная basic authentication от spring? Почему не применяется авторизация по oauth2? Вроде все инициализируется все контексты и все норм, но вот почему-то все равно возвращается стандартная страница /login:

Вот мой код:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider;
import org.springframework.security.oauth2.client.InMemoryOAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Configuration
@EnableWebSecurity
//@EnableOAuth2Sso
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private static String CLIENT_PROPERTY_KEY =     "spring.security.oauth2.client.registration.";
private static List<String> clients = Arrays.asList("google", "facebook");
private final Environment env;
@Autowired
public WebSecurityConfig(Environment env) {
this.env = env;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
        .antMatchers("/oauth_login").permitAll()
        .anyRequest().authenticated()
        .and()
        .oauth2Login()
        .clientRegistrationRepository(clientRegistrationRepository())
        .authorizedClientService(authorizedClientService())
        .loginPage("/oauth_login");
        /*.antMatchers("/home").permitAll()
        .anyRequest();
http.formLogin()
        .defaultSuccessUrl("/home", true)
        .and()
        .logout().permitAll();*/
}
@Bean
public OAuth2AuthorizedClientService authorizedClientService() {
return new InMemoryOAuth2AuthorizedClientService(
        clientRegistrationRepository());
}
@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
List<ClientRegistration> registrations = clients.stream()
        .map(this::getRegistration)
        .filter(Objects::nonNull)
        .collect(Collectors.toList());
return new InMemoryClientRegistrationRepository(registrations);
}
private ClientRegistration getRegistration(String client) {
String clientId = env.getProperty(
        CLIENT_PROPERTY_KEY + client + ".client-id");
if (clientId == null) {
    return null;
}
String clientSecret = env.getProperty(
        CLIENT_PROPERTY_KEY + client + ".client-secret");
if (client.equals("google")) {
    return CommonOAuth2Provider.GOOGLE.getBuilder(client)
            .clientId(clientId).clientSecret(clientSecret).build();
}
if (client.equals("facebook")) {
    return CommonOAuth2Provider.FACEBOOK.getBuilder(client)
            .clientId(clientId).clientSecret(clientSecret).build();
}
return null;
    }
}

Так вот делаешь запрос, спринг говорит что ты не авторизован и возвращается страница стандартная. Как это исправить? Что нужно сделать чтобы заработал oauth2.0? Может я что-то не так понял. Вот запрос на страницу авторизации

READ ALSO
Удаление дубликатов по полю объекта Stream API

Удаление дубликатов по полю объекта Stream API

У нас есть список объектов доменной области (Person)У объекта Person есть 3 поля: id, имя, фамилия

259
Комплекс вопросов : Timber в RxJava, DataBase в RxJava, присвоение RecyclerViewAdapter DataBase объектам в RxJava

Комплекс вопросов : Timber в RxJava, DataBase в RxJava, присвоение RecyclerViewAdapter DataBase объектам в RxJava

Цель: Конвертировать список Api объектов в roomDataBase объекты и присваивать RecyclerViewAdapter уже roomDataBase объектамИ все это делать , не в основном потоке...

190
Проблемы с фокусом при нажатии на Enter в EditText

Проблемы с фокусом при нажатии на Enter в EditText

Когда тыкаю на Enter в EditText, выбирается "следующим" неправильное поле(

209
Как проверять, когда был изменен файл, перед его загрузкой с сервера?

Как проверять, когда был изменен файл, перед его загрузкой с сервера?

Загружаю в стартовой активности файл с сервера(~400КБ) Файл формата

187