我正在尝试设置Keycloak身份验证到我的Spring-boot应用程序端点,我已经配置了SecurityFilterChain
,每当我点击路径API时,它都会重定向到Keycloak登录界面,成功完成登录后,它会显示一个白标签错误页面,无法找出我配置错误或缺少什么。
当登陆到白色标签错误页面时,它会记录Set SecurityContextHolder to OAuth2AuthenticationToken [Principal=Name: [user1]......
和Redirecting to /
。下面是我为安全配置实现的filterChain(SecurityFilterChain)。
@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http
.cors { cors ->
cors.configurationSource(corsConfigurationSource())
}
.authorizeHttpRequests { authz ->
authz
.requestMatchers(HttpMethod.GET, "/auth/**").authenticated()
.requestMatchers(HttpMethod.GET,"/noauth").permitAll()
.anyRequest().permitAll()
}
.oauth2ResourceServer{
it
.jwt()
}
.sessionManagement{
it
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
}
.httpBasic().disable()
.oauth2Login()
return http.build()
}
1条答案
按热度按时间3npbholx1#
我强烈建议你多了解一些OAuth2的背景知识,你也可以在我写的教程中找到有用的技巧(链接在同一页面上),这些教程涵盖了相当多的客户端和资源服务器配置用例。
在OAuth2中,登录是客户端(而不是资源服务器)的责任,并且需要会话。
在这里,您将OAuth2客户端和OAuth2资源服务器配置混合在同一个安全过滤器链中。
如果你的应用是一个REST API你想用JWT访问令牌来保护,删除任何与登录相关的内容(同样,这是客户端的责任)。你也可以在禁用会话时禁用CSRF保护。使用Postman或任何OAuth2 REST客户端登录,然后查询你的API。
如果你想在你的应用程序中使用OAuth2登录(也许你有服务器端渲染的UI,使用Thymeleaf或其他东西),那么你的应用程序是一个客户端,将使用会话(而不是JWT)进行保护。启用会话并删除资源服务器的部分。