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

Flutter请求Keycloak获取token报XMLHttpRequest错误但Postman正常如何解决

问题原因

你遇到的是浏览器**CORS(跨域资源共享)**限制导致的错误:

  • Postman属于桌面客户端,不受浏览器同源策略约束,所以请求可以正常执行
  • Flutter Web运行在浏览器环境时,所有跨域请求都会被浏览器自动校验CORS头,Keycloak默认没有允许你前端所在的域名(你这里是http://localhost:57146)跨域访问,所以浏览器直接拦截了请求,抛出XMLHttpRequestError。

解决方法

1. 开发阶段临时绕过(仅本地调试用)

如果只是本地开发测试,可以启动Flutter Web时禁用浏览器CORS校验:
Windows端执行:

flutter run -d chrome --web-browser-flag "--disable-web-security"

Mac端执行:

open -n -a "Google Chrome" --args --user-data-dir=/tmp/temp_chrome_user_data_dir --disable-web-security

然后在打开的Chrome窗口里运行你的Flutter Web应用即可。

2. Keycloak端配置CORS(推荐通用方案)

直接在Keycloak的管理后台配置允许跨域的域名:

  1. 登录Keycloak管理控制台,进入你对应的Realm(这里是PiattaformaPrenotazioni)
  2. 找到你配置的客户端myclient,进入设置页
  3. 找到Web Origins配置项,添加你前端的访问地址,本地开发可以填*临时允许所有来源,生产环境要填你实际的前端域名
  4. 保存配置后重启Keycloak即可生效。

3. 代码修正提示

你当前的makeTokenRequest方法没有返回响应结果,需要补充返回值逻辑才能正确拿到token:

Future<String> makeTokenRequest(String url,Map<String,String>params) async {
  try {
    print("arrivato in _restManager");
    var result = await post(url, body: params);
    print(result.toString());
    return result.body; // 补充返回响应内容
  }catch(e){
     throw e;
  }
}

生产环境不要禁用浏览器CORS,也不要在Keycloak里配置*作为允许来源,会有安全风险。

内容的提问来源于stack exchange,提问作者Zio White

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:36:02