验证后的Springboot Keycloak重定向到路径“/”而不是我想要的路径

jv4diomz  于 2023-04-20  发布在  Spring
关注(0)|答案(1)|浏览(111)

我正在尝试设置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()
}
3npbholx

3npbholx1#

我强烈建议你多了解一些OAuth2的背景知识,你也可以在我写的教程中找到有用的技巧(链接在同一页面上),这些教程涵盖了相当多的客户端和资源服务器配置用例。
在OAuth2中,登录是客户端(而不是资源服务器)的责任,并且需要会话。
在这里,您将OAuth2客户端和OAuth2资源服务器配置混合在同一个安全过滤器链中。
如果你的应用是一个REST API你想用JWT访问令牌来保护,删除任何与登录相关的内容(同样,这是客户端的责任)。你也可以在禁用会话时禁用CSRF保护。使用Postman或任何OAuth2 REST客户端登录,然后查询你的API。
如果你想在你的应用程序中使用OAuth2登录(也许你有服务器端渲染的UI,使用Thymeleaf或其他东西),那么你的应用程序是一个客户端,将使用会话(而不是JWT)进行保护。启用会话并删除资源服务器的部分。

相关问题