微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Playwright防止SSO

如何解决使用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 conditionsthis 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 举报,一经查实,本站将立刻删除。