iframe 中嵌入 ADFS + NTLM 旧 SSO 页面无法弹出 NTLM 认证框,有人遇

最近在对接内部的一套 基于 ADFS(联合身份验证)+ NTLM 协议的老旧 SSO 系统 时遇到一个非常棘手的问题,自己排查了很久没有进展,想向社区请教一下有没有人踩过类似的坑。

🟦 项目背景

我在做一个 WPS 插件,插件内部用 showDialog 打开一个弹框组件,并在里面通过 iframe 嵌入内部 SSO 的登录入口

流程大概是这样的:

  1. iframe 加载登录入口(A 地址)

  1. 内部系统会经历多次 302 重定向 → B → C(HTML 登录页面)

  1. 登录页面中有两个“选择域”的按钮

  1. 点击按钮后会继续触发接口(D),并再次多次 302 重定向 → E → F

  1. 预期行为:在 F 地址时,由后端触发 NTLM/Negotiate 弹窗(Windows 系统级认证框)

但问题来了。


实际问题:NTLM/Negotiate 认证框无法弹出,iframe 白屏

在 WPS 的 showDialog 中:

  • 点击“选择域”后,本应该弹出 NTLM/Negotiate 系统级认证框

  • 但没有任何弹窗

  • iframe 变成白屏

  • Network 中可以看到 NTLM 协议的第一步(协商)一直 pending 或直接终止

从浏览器开发工具看,没有跨域报错,但连接直接断掉。


🔍 我排查过的一些方向

  • 确认过 iframe 并非被 X-Frame-Options 拦截

  • 确认请求确实进入了 NTLM 流程(比如返回 401 + WWW-Authenticate: NTLM)

  • 也确认 iframe 内部页面在浏览器直接访问能正常弹出认证框

  • 怀疑 WPS 内置浏览器(IE 内核)可能对 NTLM 握手支持有限

  • 也排查过是否需要手动允许 ActiveX 或增强信任站点

但目前仍然不知道:

为什么在 WPS 的 iframe 环境下 NTLM/Negotiate 弹框完全无法出现?是内置浏览器不支持,还是被程序沙箱机制拦截?还是 NTLM 必须顶层窗口才允许弹?

想请教大家以下问题

  1. NTLM/Negotiate 认证能否在 iframe 中正常弹窗?是否必须在顶级窗口触发?

  1. WPS 中的 showDialog 内嵌的 IE 控件是否默认禁用 NTLM/Integrated Auth?

  1. 是否需要通过注册表或信任站点开启 “自动登录(Automatic logon with current user name and password)”?

  1. 有没有人成功在 WPS(或者 Office Add-in)内通过 iframe 走过 NTLM 认证?

  1. 这个问题究竟是技术限制,还是我漏掉了关键配置?


🆘 寻求方向/经验

如果你曾在以下环境踩过坑,非常希望能得到你的指导:

  • NTLM + iframe

  • Office/WPS 插件开发

  • 内置浏览器控件(IE WebBrowser)与 Windows 身份认证

  • ADFS + NTLM 的重定向链路

我被这个问题卡住了很久,希望能借助社区力量找到突破点。

非常感谢!

上海
浏览 111
收藏
3
分享
3 +1
+1
全部评论