Spring Boot我无法切换密钥斗篷和基本身份验证

时间:2019-11-16 08:49:08

标签: spring-boot spring-security single-sign-on basic-authentication keycloak

注意:我正在使用Spring Boot 2.1.10和Keycloak 6.0.1 我希望我可以在Web应用程序(MVC)启动时在基本身份验证和SSO之间进行选择。 所以我首先将Spring Security + Keycloak与keycloak-spring-boot-starter集成在一起

@SpringBootApplication
@EnableWebSecurity
public class KcApplication {
    public static void main(String[] args) {
        SpringApplication.run(KcApplication.class, args);
    }
}

然后我定义了一个“ sso” Spring配置文件和一个默认配置:

application.properties 如下:

spring.application.name=@artifactId@
server.port: 8081
keycloak.enabled=false
spring.main.allow-bean-definition-overriding: true

application-sso.yml 如下:

keycloak:
  enabled: true
  auth-server-url: http://localhost:8180/auth
  realm: SpringBootRealm
  resource: spring-app
  credentials:
    secret: 0c8940a4-2065-4810-a366-02877802e762
  principal-attribute: preferred_username

然后我得到了两个不同的安全配置器:

@Configuration @Profile("!sso")
public class BasicAuthConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
            .antMatchers("/customers*").authenticated()
            .anyRequest().permitAll()
        .and().httpBasic()  //DEBUG can't force
        .and().logout().logoutSuccessUrl("/");
    }
}

@Configuration @Profile("sso")
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class KeycloakAuthConfig extends KeycloakWebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
            .antMatchers("/customers*").authenticated()
            .anyRequest().permitAll();
    }
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider authProvider = keycloakAuthenticationProvider();
        authProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(authProvider);
    }
    @Bean
    public KeycloakSpringBootConfigResolver keycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }
}

在这两种情况下,所有启动均顺利进行,并且“ sso”配置文件的行为正确:进入/ consumers路径首先转向重定向到Keycloak,然后在经过身份验证后返回。 但是我无法获得默认的个人资料来登录。输入/ consumers时,我得到一个username,没有被要求进行登录。

我想问题出在我错过的事情上,所以我尽可能多地强调。有没有人知道为什么正确的配置程序是在调试时运行的,为什么我无法登录? 谢谢

1 个答案:

答案 0 :(得分:0)

嗯,花了整个周末重新设置了会话,然后它才起作用! 证明可能是注销导致错误了……我什至不难过:-(