iframe方式嵌入jumpserver的terminal的问题

1. 场景描述

当前版本3.10.19,现在想通过iframe方式嵌入jumpserver的terminal

  1. 开启 AUTH_SSO

  2. 通过 /api/v1/authentication/super-connection-token/ 获取 login_url

  3. 得到的 URL 格式为:https://jms-host/api/v1/authentication/sso/login/?authkey=xxx&next=/koko/connect/?token=yyy

  4. 将此 URL 放入第三方系统的 iframe 中加载。

  5. 修改了core配置

SSO 认证配置

AUTH_SSO=True

X_FRAME_OPTIONS=ALLOWALL

DOMAINS=test-office-jumpserver.aaaa.cn

Cookie 跨站策略(允许在 iframe 中传递)

SESSION_COOKIE_SAMESITE=None

SESSION_COOKIE_SECURE=True

CSRF 跨站策略

CSRF_COOKIE_SAMESITE=None

CSRF_COOKIE_SECURE=True

CSRF 信任来源

CSRF_TRUSTED_ORIGINS=http://localhost:3000,https://test-office-jumpserver.aaaa.cn

CORS_ALLOWED_ORIGINS=http://localhost:3000

  1. 修改了源码/opt/jumpserver/apps/jumpserver/settings/base.py

目前来看,3.10.19版本,并未把这两个配置释放出来,所以需要手动修改源码来设置这两个配置项:

SESSION_COOKIE_SAMESITE = os.environ.get(“SESSION_COOKIE_SAMESITE”, “Lax”)

CSRF_COOKIE_SAMESITE = os.environ.get(“CSRF_COOKIE_SAMESITE”, “Lax”)

  1. 问题:

当前情况是,得到login_url,在新的浏览器窗口能正常访问并登入到服务器。但在iframe中,会跳转到jumpserver的登入页面。

现在想咨询的时候,是否有办法在iframe中正常使用jumpserver的terminal功能,或者是否有其他的解决方案来实现这个需求?

另外做了以下的测试:

先在浏览器里允许这个域名的第三方 Cookie 再测一次。

Chrome 里去:

chrome://settings/cookies

把下面域名加入允许列表:

[*.]test-office-jumpserver.aaaa.cn

再次测试,iframe里面的就能正常登入到 JumpServer 的 Terminal 页面了。

想请教官方技术大大和社区的小伙伴:

想采用 iframe方式嵌入terminal的最佳方案是什么?

希望能得到官方的关注和解答,感谢!

  1. 该问题与浏览器对第三方 Cookie 的限制有关,即使已配置 X_FRAME_OPTIONS=ALLOWALLCSRF_COOKIE_SAMESITE=NoneSESSION_COOKIE_SAMESITE=None 等参数,现代浏览器(如 Chrome)默认阻止跨站 Cookie,导致 iframe 中无法维持登录会话。

  2. 社区版 JumpServer 未官方支持 iframe 嵌入 Terminal 的完整单点登录流程,尤其在第三方系统跨域场景下存在浏览器安全策略限制,目前无标准配置可彻底解决此问题。

  3. 可行方案建议:

    • 用户在浏览器设置中允许第三方 Cookie(临时 workaround);
    • 或由第三方系统通过新窗口打开 login_url,避免嵌入 iframe;
    • 企业版支持更完善的 SSO 集成与前端嵌入能力【企业版有优化】。
  4. 建议关注 JumpServer 官方后续版本是否增强对嵌入式场景的支持。