如何在登录时跳过默认的 Spring Security OAuth2 提供程序提示

问题描述 投票:0回答:1

我与 spring boot/security 和 Keycloak 进行了基本集成。 当我单击受保护的资源时,我会被重定向到默认的 Keycloak 登录页面,但是当我访问应用程序上的 /login 路径时,我会被重定向到以下提示:

如您所见,仅配置了一个 OAuth2 提供程序,这使得该页面完全不切实际。

如何跳过此页面或禁用通向此页面的 /login 路径?

Spring 安全配置:

属性文件:

spring.security.oauth2.client.registration.keycloak.client-id=some-client spring.security.oauth2.client.registration.keycloak.client-secret=copied_secret spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.keycloak.scope=openid spring.security.oauth2.client.provider.keycloak.issuer-uri=http://localhost:8180/realms/some_realm spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8180/realms/some_realm

安全配置:

`@EnableWebSecurity
 @Configuration(proxyBeanMethods = false)
  public class WebSecurityConfig {

private final KeycloakLogoutHandler keycloakLogoutHandler;  
WebSecurityConfig(KeycloakLogoutHandler keycloakLogoutHandler) {    
     this.keycloakLogoutHandler = keycloakLogoutHandler;    
 }  
 @Bean  
 protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {  
     return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());   
 }
 @Bean  
 public SecurityFilterChain clientFilterChain(HttpSecurity http) throws Exception { 
     http.authorizeHttpRequests(authorize ->
        authorize.requestMatchers(
             "/",
             "/themes/**",
             "/login")
        .permitAll()
        .anyRequest().authenticated()
     );
     http.oauth2Login(Customizer.withDefaults())
         .logout(logoutCustomizer ->
                 logoutCustomizer.addLogoutHandler(keycloakLogoutHandler)
                         .logoutSuccessUrl("/"));
     return http.build();
 }

 @Bean
 public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
     return http.getSharedObject(AuthenticationManagerBuilder.class)
             .build();
 }
}`

我已经尝试过了

  1. 使用

    formLogin().disable()
    禁用页面。还尝试用接受定制器并从那里禁用它的新方法替换这个过时的方法。

  2. 创建并保护另一个路径,例如:loggedInUser 以利用跳过此页面的优势,但路径 /login 仍然存在,看起来像是未完成的工作。

spring-boot spring-security oauth-2.0 keycloak spring-oauth2
1个回答
0
投票

您有两个选择:

  • 您不会重定向到
    /login
    ,而是重定向到登录页面中链接的 URI
  • @Controller
    提供您自己的
    /login
    并使用 302 进行响应,位置位于登录页面中链接的 URI

第一个选项允许在需要时保留默认页面。

© www.soinside.com 2019 - 2024. All rights reserved.