iframe 中嵌入 ADFS + NTLM 旧 SSO 页面无法弹出 NTLM 认证框,有人遇
最近在对接内部的一套 基于 ADFS(联合身份验证)+ NTLM 协议的老旧 SSO 系统 时遇到一个非常棘手的问题,自己排查了很久没有进展,想向社区请教一下有没有人踩过类似的坑。
🟦 项目背景
我在做一个 WPS 插件,插件内部用 showDialog 打开一个弹框组件,并在里面通过 iframe 嵌入内部 SSO 的登录入口。
流程大概是这样的:
iframe 加载登录入口(A 地址)
内部系统会经历多次 302 重定向 → B → C(HTML 登录页面)
登录页面中有两个“选择域”的按钮
点击按钮后会继续触发接口(D),并再次多次 302 重定向 → E → F
预期行为:在 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 或增强信任站点
但目前仍然不知道:
❓ 想请教大家以下问题
NTLM/Negotiate 认证能否在 iframe 中正常弹窗?是否必须在顶级窗口触发?
WPS 中的 showDialog 内嵌的 IE 控件是否默认禁用 NTLM/Integrated Auth?
是否需要通过注册表或信任站点开启 “自动登录(Automatic logon with current user name and password)”?
有没有人成功在 WPS(或者 Office Add-in)内通过 iframe 走过 NTLM 认证?
这个问题究竟是技术限制,还是我漏掉了关键配置?
🆘 寻求方向/经验
如果你曾在以下环境踩过坑,非常希望能得到你的指导:
NTLM + iframe
Office/WPS 插件开发
内置浏览器控件(IE WebBrowser)与 Windows 身份认证
ADFS + NTLM 的重定向链路
我被这个问题卡住了很久,希望能借助社区力量找到突破点。
非常感谢!