我正在尝试让我们的 Playwright 测试在我们的 CI/CD 管道中运行。我发现关于如何针对我们的具体情况执行此操作的文档很少。以下是关键组件:
因此,我可以将测试指向我们的开发 IIS 服务器,并从 Visual Studio 2022 本地运行它们,没有任何问题。但是,当我在管道中运行它们时,我收到“401 Unauthorized”错误。看来这显然是由于我本地使用 my Windows Auth 凭据,而构建服务器显然没有我的凭据。
所以我的问题是:在 Azure DevOps Server 管道中针对使用 Windows 身份验证的 IIS 网站运行 Playwright 测试有哪些策略?”
就其价值而言,以下是我找到的参考文献,但它们要么没有答案,要么已关闭而没有解决方案:
我只是还没有看到太多关于如何使这些测试发挥作用的文档或指南。最后,出于安全原因,我们需要启用 Windows 身份验证并将其作为我们网站的唯一身份验证机制。这并不是真正规避安全的选择。也许这是不可能的,但我希望它在某个地方明确地被调用。
谢谢, 迈克尔
根据您的描述,构建服务器和Web服务器位于两台不同的机器中。
默认情况下,浏览器将启用 Windows 集成身份验证 进行身份验证。它将自动使用当前用户登录网站。
在您的情况下,它将直接使用Build Server上的用户访问Web Server并导致401错误。
要解决此问题,您需要先禁用 Windows 集成身份验证。
通过菜单栏导航至工具 -> Internet 选项 -> 安全
选择本地内联网并单击“自定义级别”按钮
滚动到窗口底部的“用户身份验证”部分,选择“提示输入用户名和密码”
单击“确定”、“应用”和“确定”以保存更改。
例如:
请参阅此文档:如何从浏览器禁用集成 Windows 身份验证 (IWA)
然后您可以在 Playwright 项目中设置 IIS Web Server 的 Windows 用户凭据。请参阅此文档:HTTP 身份验证
例如:
using var context = await Browser.NewContextAsync(new()
{
HttpCredentials = new HttpCredentials
{
Username = "bill",
Password = "pa55w0rd"
},
});
var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com");
这里有一个具有类似要求的票证:Prevent SSO with Playwright
另一方面,您也可以考虑在 IIS Web 服务器上设置 自托管代理。
在这种情况下,您不需要对代码进行任何更改。它将使用 IIS Web 服务器上的用户访问 Azure Pipeline 中的网站。