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

升级Apache Guacamole至1.6.0后令牌认证失效问题排查

关于Apache Guacamole 1.6.0认证机制变更的问题

问题场景

我的React-Admin Web应用中有一个页面通过Apache Guacamole代理至其他站点,原认证逻辑包含三步API调用:

  1. 从本地数据库获取guacProxyUrl;
  2. 向guacProxyUrl的/api/tokens端点发起POST请求,发送用户名和密码完成认证;
  3. 打开新窗口访问guacProxyUrl。

原实现代码如下:

const authenticateAndOpenGuacamole = (record) => {
  axios(
    withAuth({
      url: getGuacInfoUrl(record),
    })
  ).then(({ data }) => {
    const { guacProxyUrl } = data;

    axios(
      withAuth({
        url: `${guacProxyUrl}api/tokens`,
        method: 'post',
        data: `username=${record.guacUsername}&password=${record.guacPassword}`,
      })
    ).then(({ data }) => {
      localStorage.setItem('GUAC_AUTH', JSON.stringify(data));
      window.open(guacProxyUrl, '_blank');
    });
  });
};

未修改应用代码,仅将Guacamole从1.5.5升级至1.6.0后,该认证逻辑失效。目前已找到修复方案:将window.open(guacProxyUrl, '_blank');替换为window.open(${guacProxyUrl}#/?token=${data.authToken}, '_self');,通过URL显式传递认证令牌。

但在1.5.5版本中,无需在window.open中传递凭据即可正常认证,首次认证后后续访问会自动携带Guacamole认证令牌,而1.6.0版本不再自动携带。请问这是否是1.5.5版本中GUAC_LOCAL存储的机制在1.6.0中被变更?(参考旧问题:GUACAMOLE-549)

解答

是的,Apache Guacamole 1.6.0确实对客户端的认证令牌存储与传递机制做了变更:

  • 在1.5.5及更早版本中,调用/api/tokens获取认证令牌后,Guacamole的前端会自动将令牌存储在localStorage的GUAC_LOCAL相关键中,当通过新窗口打开Guacamole页面时,前端能直接读取该存储的令牌完成自动认证,无需显式传递。
  • 1.6.0版本调整了这一逻辑,不再依赖跨窗口的localStorage共享来自动携带令牌。这一变更和GUACAMOLE-549问题的优化方向一致,主要是为了提升安全性,避免因跨窗口存储共享带来的令牌泄露风险,因此强制要求通过URL的#/?token=参数显式传递认证令牌,也就是你现在使用的修复方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:13:10