当前位置: 首页 > 知识库问答 >
问题:

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

芮瑾瑜
2023-03-14

注意:我正在使用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

和应用程序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());
    }
}

在这两种情况下,Everithing都能顺利启动,“sso”配置文件的行为正确:首先进入/消费者路径,然后重定向到Keyclope,并在经过身份验证后返回。但我无法获取默认配置文件来登录。当输入/消费者时,我得到一个匿名用户,而不是被要求形成登录。

我想这个问题是因为我错过了一些东西,所以我尽可能多地放在上面。有人知道为什么我不能登录,尽管在调试时运行了正确的配置程序?非常感谢。

共有1个答案

周弘毅
2023-03-14

嗯,整个周末才重置会话,然后就成功了!证明可能是注销导致了错误。。。我甚至不难过:-(

 类似资料:
  • 嗨,好几天了,我都被困在这上面了!在使用本指南转换我的react应用程序后,我尝试使用KeyClope对我的electron应用程序进行身份验证。 当我运行'npm运行电子:dev'时,keyCloak会重定向到登录页面。然而,当我运行'npm运行电子:prod'这失败。 来自KeyClope服务器的日志显示: 请注意,重定向_uri是'file:///...“我相信这就是原因。 我也试图改变下面

  • 我正在尝试配置我的本地键盘斗篷8.0.1实例,以使用谷歌作为身份提供者。我正在按照我在这里找到的说明进行操作。我已经相应地配置了我的身份提供者、领域和客户端。当我点击登录页面时,我看到执行谷歌登录的按钮。然而,当我点击它并浏览谷歌同意页面时,我最终被带回键盘斗篷,看到一个错误,上面写着,在我的键盘斗篷日志中,我看到以下内容: 除了说明中的领域名称外,我没有更改任何内容。知道为什么我会看到此错误吗?

  • 我正在尝试编写一个定制的KeyClope验证器,该验证器可以从某个请求中检索用户凭据,并动态提交这些凭据进行身份验证,而最终用户不必手动将它们输入某个登录表单。 以这个问题为起点,我在KeyCloak中创建了自己的自定义身份验证SPI。我还根据需要配置了KeyCloak身份验证流。 自定义验证器 自定义验证器工厂 下面是我的自定义登录表单,它基于这里的KeyClope“secret questio

  • 我有一个需要联合到IDP的需求。我过去从未遇到过问题,在这种情况下,我遇到了问题,因为第三方/外部IDP启用并实施了PKCE。 有没有办法联合到启用了PKCE的IDP。基本上换句话说,我应该能够转发/发送code_challenge和code_challenge_method给外部 IDP。我可以在我的 IDP 上启用 PKCE,而不会出现任何问题,并在需要时将相同的标头转发给外部 IDP,但我看

  • 我试图使用Keycloak的openId-connectendpoint来获取关于用户角色的信息。我使用/auth/realms/moje/protocol/OpenID-connect/userinfoendpoint来获取关于已验证用户的信息。我可以获得姓名、用户名、电子邮件等信息。但是我不能强迫Keyclak给我关于用户角色的信息。 我已经阅读了openID文档,我没有找到任何关于必须获取角

  • 我试图实现一个自定义密钥克拉克身份验证器SPI,用于对外部身份提供程序进行身份验证。用户已经存在于keycloak存储中,我只需要连接到自定义SPI来验证他们。 我正在遵循官方指南https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough的第8.3节,这与我所需要的非常相似。