我在使用Keycloak单机版设置一个简单的Spring Web关+oauth2客户端时运气不佳。它的keycloack部分工作正常。Wireshark显示令牌正确生成。
网关安全配置如下。我仍然不确定是否需要permitAll()登录回调url。一些指南建议应该这样做,其他指南则没有。我怀疑oauth提供程序在幕后管理这部分。尽管如此,无论是否为"/login/* "路径使用permitAll,结果都是一样的。
@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange(e -> e.anyExchange().authenticated());
http.oauth2Login(Customizer.withDefaults());
http.csrf().disable();
return http.build();
}
}
登录后,重定向到https://localhost:9000/login似乎不正确,应重试原始URL,例如https://localhost:9000/test-service/v1/listall/
编辑
为了排除任何错误的配置,甚至尝试了一个最简单的网关和api资源(未认证),并在keyclock中设置了最简单的relam,结果没有改变:(有很多文章都在做完全相同的事情。
∮ ∮ ∮ ∮ ∮一卡一卡一
有什么建议吗?
多谢
5条答案
按热度按时间piwo6bdm1#
甚至我已经完成了包括“创建客户端”、“创建作用域”和用这个作用域创建“用户”在内的所有配置,我又遇到了这个问题。
唯一对我有效的解决方案是将
scope :openid
添加到application.yaml。您可以从这里引用application.yaml Security OAuth配置:
e4eetjau2#
根据官方文档(可在https://www.keycloak.org/docs/latest/securing_apps/#_spring_security_adapter上找到),您应该使用
o7jaxewo3#
我发现它是一个错误的用户名属性。正确的值是
出于某种原因,我将它设置为preferred_name,如果spring oauth只写实际的错误而不是一般的invalid_grant,那么将保存大量的调试时间。
jvlzgdj94#
首先,对于任何对Spring Security进行故障排除的人,我建议通过在www.example.com或application.yml文件中设置日志级别来启用调试日志记录application.properties。
application.properties 格式:
应用程序.yml格式:
我在使用OAuth2沿着Spring会话时也遇到了类似的问题。即使在使用Keycloak成功进行身份验证后,每当我的Spring会话过期时,我都会收到这个登录错误。
我不能容忍混淆身份验证流,但是我可以通过在
ServerHttpSecurity
上设置自己的身份验证入口点来解决这个问题:然后,我必须在我的控制器中处理任何对“/login”页面的请求。对我来说,我只需要重定向到我的默认登录页面来处理根请求:
hzbexzde5#
不知何故,在我的www.example.com中添加“scope=openid”applications.properties对我来说很好