пользовательская страница входа для входа клиента spring security oauth2

#spring-boot #spring-security-oauth2

#spring-boot #spring-security-oauth2

Вопрос:

Я пытаюсь реализовать социальный вход в моем приложении spring boot 2 с пользовательской страницей входа. Я устанавливаю spring-boot-starter-oauth2-client в качестве зависимости в моем pom.

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
  

Затем я предоставляю некоторый идентификатор клиента и секретные данные в файле свойств моего приложения..

 spring.security.oauth2.client.registration.google.client-id=client-id
spring.security.oauth2.client.registration.google.client-secret=client-secret
  

С помощью этого минимального кода spring boot регистрирует клиента и предоставляет страницу входа со ссылкой для входа через клиент. Теперь я хочу предоставить свою собственную страницу входа, поэтому я создал конфигурацию безопасности..

 @Configuration
@EnableWebSecurity(debug = false)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
          .authorizeRequests()
            .antMatchers("/auth/**", "/login/oauth2/**", "/login**", "/logout", "/**/*.css", "/**/*.js").permitAll()
          .anyRequest().authenticated()
            .and()
          .oauth2Login().loginPage("/login")
            .and()
          .logout();   
    }   
}
  

Затем я предоставляю контроллер для обслуживания моей пользовательской страницы входа, я только что поместил это в свою конфигурацию spring boot на данный момент..

 @SpringBootApplication
@Controller
public class SingleSignonApplication {
    public static void main(String[] args) {
        SpringApplication.run(SingleSignonApplication.class, args);
    }
    @RequestMapping("/login")
    public String loginPage() {
        return "login.html";
    }
}
  

.. и моя страница входа (упрощенная) предоставляет ссылки для входа в систему через Google..

 <a class="btn btn-block btn-social btn-google" href="/oauth2/authorization/google"><span class="fab fa-google"></span> Sign in with Google</a>
  

Теперь, когда я вхожу в систему с помощью этой кнопки, он вызывает Google, проходит проверку подлинности, а затем перенаправляется на login / oauth2 / code / google… Я получаю страницу 404, которая не найдена. Также перестает работать /logout. Нужно ли мне вручную настраивать другие параметры, поскольку я понимаю, что полагаюсь на spring boot для продолжения настройки клиентов, перечисленных в файле свойств приложения, и автоматической настройки клиентского репозитория.

Комментарии:

1. Я заставил это работать, отключив csrf в моей конфигурации безопасности .. http.csrf ().disable (); Это заставило выход из системы снова работать, и я думаю, что моя другая проблема была вызвана неправильным выходом из системы. Действительно изо всех сил пытаюсь найти самый современный правильный способ реализовать вход в систему в социальных сетях. Кто-нибудь знает какие-нибудь хорошие примеры.

2. проверьте здесь, и вы получите …. baeldung.com/spring-security-5-oauth2-login

3. спасибо @kumar, это было полезно.

4. запись / выход, обратите внимание на это из документации для LogoutConfigurer: URL, который запускает выход из системы (по умолчанию «/logout»). Если включена защита CSRF (по умолчанию), то запрос также должен быть POST. Это означает, что по умолчанию для запуска выхода из системы требуется сообщение «/logout». Если защита CSRF отключена, то разрешен любой HTTP-метод.