问题描述
尝试为将联合身份验证与ADFS结合使用的网站编写自动测试。
在我的Ci / CD管道中,我将不会在经过身份验证的Windows上下文中运行,因此我的Playwright测试将遇到ADFS凭据提示,但在开发我们在经过身份验证的上下文中工作的测试时会遇到提示,但Windows Pass-through auth将启动在(我的猜测是NTLM)。
如何预防?
在使用NightwatchJS编写的上一组测试中,我使用的技巧是发送未在ADFS中注册为NTLM挑战流程支持的浏览器的浏览器的自定义UserAgent字符串。 (那是Opera Mini顺便说一句)
对于Playwright来说,相同的技巧显然不起作用,我希望那里有更好的东西。
我尝试过的事情:
context = await browser.newContext({
userAgent: 'Opera/9.80 (Android; Opera Mini/12.0.1987/37.7327; U; pl) Presto/2.12.423 Version/12.16'
})
解决方法
您需要将呼叫发送到Web应用程序代理或设置内部代理。 Wep应用程序代理不支持Windows集成身份验证。
,所以.....经过一番挖掘之后,问了正确的问题,最后是:
“如何在Chrome中禁用Windows集成身份验证?”
我找到了this checklist for conditions和this answer on SO。
解决方法是向铬添加启动arg以禁用WIA。以下是重要的一点:
browser = await chromium.launch({
args: ['--auth-server-whitelist="_"'],});
这将使chrome呈现基本的身份验证提示以提示凭据。
但是,当我将其与自定义userAgent字符串(不在ADFS服务器支持的用户代理中)组合在一起时,我设法进入了ADFS的登录页面。
再次,OperaMini为我工作:
context = await browser.newContext({
userAgent: 'Opera/9.80 (Android; Opera Mini/12.0.1987/37.7327; U; pl) Presto/2.12.423 Version/12.16'
})