You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web + Spring Boot + Keycloak 基于BFF模式的OAuth2登录重定向问题求助

Flutter Web + Spring Boot + Keycloak 基于BFF模式的OAuth2登录重定向问题求助

大家好,我几乎翻遍了全网都没找到解决办法,实在没办法来求助了😩。我正在开发一个Flutter Web应用,后端用Spring Boot做BFF(Backend for Frontend),想通过Keycloak实现OAuth2登录。

按照我的设想,整个流程应该是这样的:

  • Flutter前端:只需要向Spring后端发送GET/POST/PUT等请求
  • Spring后端:负责检查session或cookie,如果用户已经认证就继续处理请求;如果未认证,就把前端重定向到Keycloak的登录页面
  • 核心是Spring后端作为Keycloak的客户端,持有access/refresh token,而Flutter前端只需要维护一个session cookie就行

但不管我试了多少教程、调整了多少配置,Flutter前端始终不接受后端返回的302重定向响应。直接访问后端接口的话,认证流程是完全正常的,一换成Flutter Web调用就不行。

我的Spring Security配置

@EnableWebSecurity
@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .oauth2Login(withDefaults())
            .oauth2Client(withDefaults())
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login").permitAll()
                // 暂时放开了所有请求,但还是不行
                //.anyRequest().permitAll()
                .anyRequest().authenticated()
            )
            .sessionManagement(session -> session
                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
            )
            .cors(withDefaults());
        return http.build();
    }
}

CORS配置

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 允许携带cookie/session
        config.setAllowedOrigins(List.of("http://localhost:60716/"));
        config.setAllowedHeaders(List.of("*"));
        config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        config.setExposedHeaders(List.of("Authorization"));
        
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

我的Flutter Web服务跑在http://localhost:60716,application.properties里也配置了正确的client-id、client-secret等Keycloak相关信息。

有没有大佬能给我指个方向,到底哪里出问题了?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:43:01