如何解决使用Playwright防止SSO
尝试为将联合身份验证与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'
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。