#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-метод.