注意:我正在使用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,并在经过身份验证后返回。但我无法获取默认配置文件来登录。当输入/消费者时,我得到一个匿名用户,而不是被要求形成登录。
我想这个问题是因为我错过了一些东西,所以我尽可能多地放在上面。有人知道为什么我不能登录,尽管在调试时运行了正确的配置程序?非常感谢。
嗯,整个周末才重置会话,然后就成功了!证明可能是注销导致了错误。。。我甚至不难过:-(
嗨,好几天了,我都被困在这上面了!在使用本指南转换我的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节,这与我所需要的非常相似。